我是新建Builder構件並試圖找到在我的Spring模型中使用構建器模式的方法。如何在構建器模式中使用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片斷
<html>
<head></head>
<body>
<form:form modelAttribute="userInterests" action="addInterest"
method="post">
<!-- Do more -->
</body>
</html>
但是,因爲我改變了模型中使用的建設者,我不能用userInterests模型實例作爲此構造函數是私有的。我可以使用request.getParameter()分別獲取用戶和interestlevel值,並使用build綁定到userInterests模型。但有沒有一種方法可以直接使用@ModelAttribute作爲構建器,而不必單獨獲取值。
任何幫助將不勝感激。
那麼,有沒有辦法使用依賴注入來使用構建器模式。 –
如果你想要自動數據綁定功能,那麼你不能。您必須使用構建器API手動將modelAtrribute轉換爲其他對象。 – Shailendra