我想知道如何强制spring从POST数据(而不是GET)填充 autowired bean。 问题是我有一个映射到bean的表单(即只有setter和getter的类),由于@RequestMapping函数可以处理它:
@RequestMapping("/my/custom/url")
public String myFunction(HttpSession session,
HttpServletRequest request,
@ModelAttribute @Valid MyBean bean,
Errors errors, RedirectAttributes redirectAttributes)
因此,为了解释这个问题,假设我在MyBean中有一个变量A.如果我通过GET参数发送它( / my / custom / url? A = foo ),那么 bean 将填充它&#39 ; s值不应该是(imho)。
我该如何解决?
提前致谢。
答案 0 :(得分:3)
如果您要阻止GET
请求点击此方法,则需要指定要接受的http方法(如果您未指定,则GET
是默认值):< / p>
@RequestMapping(value = "/my/custom/url", method=RequestMethod.POST)
GETs
现在将被拒绝;只有POSTs
会触及您的方法。
听起来你也需要使用@RequestBody
注释:
@RequestMapping(value = "/my/custom/url", method=RequestMethod.POST)
public String myFunction(HttpSession session,
HttpServletRequest request,
@RequestBody MyBean bean,
Errors errors, RedirectAttributes redirectAttributes)
@ModelAttribute
适用于GETs
:将URL字符串中的值绑定到您的bean中(如您所示)。
但是,对于帖子,Spring需要将帖子的 body 绑定到bean,这略有不同:因此@RequestBody
注释。
答案 1 :(得分:0)
您可以强制spring只接受方法的POST请求,因此在您的情况下它将是:
@RequestMapping(value="/my/custom/url", method=RequestMethod.POST)
public String myFunction(HttpSession session,
HttpServletRequest request,
@ModelAttribute @Valid MyBean bean,
Errors errors, RedirectAttributes redirectAttributes)