我需要将表单数据映射到pojo,所以我将POJO设置为方法参数。那么请求数据应该绑定到pojo。但它不起作用。我正在使用spring 4.2.3.RELEASE
。这是我的代码
public class PersonDto {
private int userId;
private String userName;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
@Controller()
@RequestMapping("/u")
public class UserController {
@ResponseBody
@RequestMapping(value = "/add",method = RequestMethod.POST)
public String addUser(PersonDto dto){
System.out.println("Name : "+dto.getUserName());
return ""+dto.getUserName();
}
@RequestMapping("/home")
public String userHome(){
System.out.println("UserDetailsController Index");
return "user-home";
}
}
在这里家庭请求映射正在工作。但是当我向/add
发送帖子请求时,PersonDto为空。这是我发送请求的方式这是什么原因?
答案 0 :(得分:0)
您需要使用@RequestBody在方法参数中注释PersonDto dto,以指示它应该绑定到请求正文:
public String addUser(@RequestBody PersonDto dto){
答案 1 :(得分:0)
尝试以下选项:
在POST方法中使用@RequestBody。
包括杰克逊的maven依赖
com.fasterxml.jackson.databind.ObjectMapper
答案 2 :(得分:0)
尝试使用@ModelAttribute
注释标记您的方法参数:
@ResponseBody
@RequestMapping(value = "/add",method = RequestMethod.POST)
public String addUser(@ModelAttribute("dto") PersonDto dto){
System.out.println("Name : "+dto.getUserName());
return ""+dto.getUserName();
}
注意,您可以指定模型属性的名称。如果您使用<spring:form>
代码检查,请填写modelAttribute
属性:
<form:form method="POST" action="/someaction" modelAttribute="dto">
...
</form:form>
答案 3 :(得分:0)
我可能会很晚才参加派对,但如果这个问题尚未解决(因为我没有看到任何已接受的答案),这个答案可能有所帮助。我有一个类似的问题,并意识到我没有添加一个构造函数,其中可以设置在请求体中传递的所有参数。所以可能添加以下构造函数:
public PersonDto(int userId, String userName){
this.userId=userId;
this.userName=userName;
}
如果这对你有用,请告诉我。如果已经做了其他事情,请分享你的答案,因为我认识到我的愚蠢错误是一项非常重要的任务。