这是我的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 方法中进行一些验证,以确保如果其中一个必需参数不存在则抛出异常?
答案 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" />