如何在Spring中验证请求参数?

时间:2017-08-31 15:12:27

标签: java spring spring-mvc spring-annotations

这是我的CODE开头:

PersonController.java

@RequestMapping(value = "/person", method = RequestMethod.POST)
    public ResponseEntity<?> addPerson(@Valid Person p, HttpServletResponse response) {
        ...
    }

Person.java

public class Person {    

    @NotNull
    String name;    

    @NotNull
    int age;    

    String gender;
}

要求是:当对/ person发出POST请求时,如果用户没有为字符串名称指定密钥,我希望抛出异常在请求的BODY中。注释@NotNull不会这样做。

我是否可以在Person.java中使用另一个注释来实现此目的?如果没有,我是否可以在 addPerson 方法中进行一些验证,以确保如果其中一个必需参数不存在则抛出异常?

2 个答案:

答案 0 :(得分:0)

实际上@NotNull注释完全符合您的要求,但遗憾的是它无法在int类型上执行,因为它不能是null。为了使它工作,您需要将年龄更改为Integer,然后在弹簧执行值绑定后,如果两个参数都通过并且它们具有验证将通过的值。否则,如果它们以空值传递或未传递,则值为null,验证将失败。只需确保您没有Person的构造函数将属性初始化为某些值。

如果您不想更改它并使用int,可以将HttpServletRequest request添加到方法参数中,并检查是否存在参数age

request.getParameter('age');

如果是null,则根本没有传递任何参数。

提示:可能是您缺少某些配置并且根本没有处理注释,例如<mvc:annotation-driven/>@EnableWebMvc,或者您可能缺少像{这样的实际验证器实现{3}}。如果没有配置样本,很难说清楚。

答案 1 :(得分:-1)

首先,您需要在域类中封装字段。弹簧容器将使用这些getter和setter来操作对象。

然后,您可以添加constraints to these getters and setters (Bean Validation)。如果你正确添加它们,Spring会在使用@Valid注释(你做过)时捕获错误。这些错误将添加到BindingResult中,并可以使用Spring表单标记在jsp中显示。

<form:errors path="field_that_was_manipulated_incorrectly" />