빌더 패턴을 처음 사용하고 스프링 모델에서 빌더 패턴을 사용하는 방법을 알아 내려고합니다.스프링 @ModelAttribute를 빌더 패턴과 함께 사용하는 방법
내 이전 모델은 내가 빌더 방법으로 대체하고, 이제 코드는 다음과 같이 보이는 모든 세터와 게터 방법이 있었다 : 나는 UI에서 사용자 interestlevel을 복용 한 빌더없이
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);
}
}
}
이전을, (JSP로) 그것을 UserInterests 모델에 바인딩했습니다. 컨트롤러에서 @ModelAttribute를 사용하여 UserInterests의 인스턴스를 가져 와서 사용하고있었습니다. 나는이의 생성자는 개인이기 때문에, 내가 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>
니펫을하지만 :
는 컨트롤러 니펫을. request.getParameter()를 사용하여 사용자 및 interestlevel 값을 별도로 가져올 수 있으며 build를 사용하여 userInterests 모델에 바인딩 할 수 있습니다. 그러나 값을 별도로 가져와야하는 빌더를 위해 @ModelAttribute를 직접 사용할 수있는 방법이 있습니다.
도움이 될 것입니다.
그래서 내 의존성 주입과 함께 빌더 패턴을 사용하는 방법이 있습니까? –
자동 데이터 바인딩 기능을 원하면 그럴 수 없습니다. 빌더 API를 사용하여 modelAtribute를 다른 객체로 수동으로 변환해야합니다. – Shailendra