请求数据(post)在春天不绑定到POJO

时间:2016-02-13 17:39:58

标签: java spring spring-mvc

我需要将表单数据映射到pojo,所以我将POJO设置为方法参数。那么请求数据应该绑定到pojo。但它不起作用。我正在使用spring 4.2.3.RELEASE。这是我的代码

PersonDto类

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;
}
}

UserController类

@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为空。这是我发送请求的方式request这是什么原因?

4 个答案:

答案 0 :(得分:0)

您需要使用@RequestBody在方法参数中注释PersonDto dto,以指示它应该绑定到请求正文:

public String addUser(@RequestBody PersonDto dto){

答案 1 :(得分:0)

尝试以下选项:

  1. 在POST方法中使用@RequestBody。

  2. 包括杰克逊的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;
}

如果这对你有用,请告诉我。如果已经做了其他事情,请分享你的答案,因为我认识到我的愚蠢错误是一项非常重要的任务。