这是我的@Controller
:
@RequestMapping(value = "/add")
public void addMember(Member member) {
// ... ...
}
这里是Member
class:
class Member {
private Integer id;
private String username;
// ... ...
}
这是请求网址:
/add?memberId=1&username=bruce
如何将memberId
参数绑定到Member.id
字段?
谢谢!
答案 0 :(得分:3)
如果您不想使用
@RequestMapping(value = "/add")
public void addMember(@RequestParam(value = "username") String username, ...) {
Member member = new Member(username, ...)
// ...
}
你可以实现HandlerMethodArgumentResolver:
public class MemberHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return Member.class.equals(parameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
String username = webRequest.getParameter("username");
...
return new Member(username, ...);
}
}
在配置中:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean id="memberResolver" class="com.company ... MemberHandlerMethodArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
或JavaConfig:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
...
@Override
public void addArgumentResolvers(List<Handlermethodargumentresolver> argumentResolvers) {
argumentResolvers.add(new MemberHandlerMethodArgumentResolver());
}
}
答案 1 :(得分:3)
恕我直言,最简单的方法是在Member
类中使用额外的setter:
class Member {
private Integer id;
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setMemberId(Integer memberId) { // this one should to the trick
this.id = memberId;
}
// ... ...
}
答案 2 :(得分:0)
您可以使用 @JsonProperty 注释。如下所示。
class Member {
@JsonProperty("memberId")
private Integer id;
private String username;
// ... ...
}