【问题标题】:Sprint MVC @ModelAttribute POST not workingSpring MVC @ModelAttribute POST 不起作用
【发布时间】:2014-01-25 14:41:59
【问题描述】:

我有这个问题,我用 get 调用 API,它工作正常,而它在 POST 的情况下给出空对象。下面是代码sn-ps。

@Controller
@RequestMapping("/demo")
public class DemoController {
@RequestMapping(value = "/create")
    public ModelAndView createUser(@ModelAttribute User user) {
    ...
    ...
    }
}

GET: localhost:8080/demo/create.json?name=test&title=这很好用 使用表单数据的 POST 不起作用。我得到的是空对象。

public class User implements Serializable {
    private String name;
    private String title;

    ...
}

【问题讨论】:

  • 所以对于 POST 请求,createUser 方法正在被调用 - 但 User 对象有一个空的 nametitle
  • 你能出示一下表格吗?

标签: spring spring-mvc post model-view-controller modelattribute


【解决方案1】:

我会建议以下代码。

@RequestMapping(value = "/create", method = RequestMethod.GET)
public ModelAndView createUser() {

   ModelAndView modelAndView = new ModelAndView("/createuser.jsp");
   modelAndView.addObject("user", new User());
   return modelAndView;
}

@RequestMapping(value = "/create", method = RequestMethod.POST)
public ModelAndView createUserProcess(@ModelAttribute("user") User user,) {
  // save user to db

}

只是出于好奇。您不应该使用 createUser 显示表单并使用 createUserProcess 处理它吗?还要确保您的表单具有以下内容:

<form:form commandName="user" modelAttribute="user"> 


</form:form>

【讨论】:

  • 你改变了什么?没有method 属性的@RequestMapping 处理所有HTTP 请求类型。
  • 我假设你想显示一个表单然后处理它。由于没有必要,我没有将任何内容传递给 createUser。如果 createUser 是您的表单处理代码,则将 createUserProcess 更改为 createUser。除此之外,您不能让相同的方法接受 GET 和 POST 方法(至少在我上次检查时)
  • 按照 OP 的代码,他们的 createUser 方法将同时处理 POST 和 GET。您提出的更改不会改变任何实际问题(我们实际上仍然不知道)。
  • 最好的做法是同时处理 POST 和 GET,即使这是可能的。只是想帮忙。如果他提供表单的代码会有所帮助。
【解决方案2】:

感谢您的友好回复。我正在使用 Postman 来验证我的控制器。我发现我需要添加多部分解析器。

下面是修复它的行。

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

谢谢!

【讨论】:

  • 你是在哪里添加的?我也面临同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
相关资源
最近更新 更多