Spring - 强制bean属性来自post变量

时间:2015-03-24 15:21:52

标签: java spring security spring-mvc javabeans

我想知道如何强制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)。

我该如何解决?

提前致谢。

2 个答案:

答案 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)