私はBuilderパターンを初めて使用し、SpringモデルでBuilderパターンを使用する方法を理解しようとしています。spring @ModelAttributeをビルダーパターンで使用する方法
私の以前のモデルは、私はビルダーメソッドに置き換え、すべてのsetterメソッドとgetterメソッドを持っていたし、今のコードは次のようなものになります。
以前public class UserInterests {
private final String user;
private final int interestlevel;
private UserInterests(UserInterestBuilder builder) {
this.user = builder.user;
this.interestlevel = builder.interestlevel;
}
public String getUser() {
return user;
}
public static class UserInterestBuilder {
private String user;
private int interestlevel;
public UserInterestBuilder() {
}
public UserInterestBuilder user(final String userId) {
this.user = user;
return this;
}
public UserInterestBuilder interestLevel(final int interestLevel) {
this.interestLevel = interestLevel;
return this;
}
public UserInterests build() {
return new UserInterests(this);
}
}
}
を、ビルダーせずに私は(UIからユーザーinterestlevelを取っていましたjsp)、それをUserInterestsモデルにバインドしていました。コントローラでは、@ModelAttributeを使用してUserInterestsのインスタンスを取得し、使用していました。
コントローラは、スニペット:
@RequestMapping(value = "/addInterest", method = RequestMethod.POST)
public ModelAndView addUserInterest(
@ModelAttribute(USER_INTEREST) UserInterests userInterests,
BindingResult result, HttpSession session, ModelAndView model) {
//do something here
}
JSPは、私はビルダーを使用するようにモデルを変更するので、こののコンストラクタがプライベートであると、私はモデルインスタンスをuserInterests使用することはできません、
<html>
<head></head>
<body>
<form:form modelAttribute="userInterests" action="addInterest"
method="post">
<!-- Do more -->
</body>
</html>
をスニペットしかし。私は、request.getParameter()を使用してuserとinterestlevelの値を別々に取得し、buildを使用してuserInterestsモデルにバインドできます。しかし、@ModelAttributeを直接ビルダーに使用して、別々に値を取得する必要はありません。
ご協力いただきますようお願い申し上げます。
私の依存性注入でビルダーパターンを使用する方法はありますか? –
自動データバインディング機能が必要な場合は、できません。 Builder APIを使用してmodelAtributeを他のオブジェクトに手動で変換する必要があります。 – Shailendra