我正在使用Spring Boot2。我想在服务器端添加某些动态验证,这些验证应在POST REST调用中执行。可以在POST方法调用的参数级别以注释的形式添加这些验证吗?
答案 0 :(得分:0)
下面的代码将帮助您实现服务器端验证。
Pojo类:
public class Data {
@NotNull
private final String someStringValue;
@Min(1)
private final int someIntValue;
@JsonCreator
public Data(@JsonProperty("someStringValue") String someStringValue, @JsonProperty("someIntValue") int someIntValue) {
this.someStringValue = someStringValue;
this.someIntValue = someIntValue;
}
public String getSomeStringValue() {
return someStringValue;
}
public int getSomeIntValue() {
return someIntValue;
}
为了进行验证,我们需要一个包含逻辑的自定义类:
@Component
public class StringValueValidator {
public void validate(String language, Data data, Errors errors) {
if (!"de-DE".equals(language)) {
if (data.getSomeStringValue().length() > 140) {
errors.reject("someStringValue");
}
}
}
}
控制器方法:
@RequestMapping(value = "/validation", method = RequestMethod.POST)
public ResponseEntity<?> acceptData(@Valid @RequestBody Data data, Errors errors,
@RequestHeader(HttpHeaders.ACCEPT_LANGUAGE) String language) {
stringValueValidator.validate(language, data, errors);
if (errors.hasErrors()) {
return new ResponseEntity<>(createErrorString(errors), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.OK);
}
请参阅:https://blog.codecentric.de/en/2017/11/dynamic-validation-spring-boot-validation/
答案 1 :(得分:0)
这是在从客户端收到的RequestBody
中定义验证的方法。
定义您将从客户端收到的POJO。
public class Employee implements Serializable {
private Long id;
@NotNull(message = "Name should not be null")
@NotBlank(message = "Name should be not empty")
@Size(min = 1, max = 255, message = "Name allowed max 255 characters")
private String name;
现在,在您的控制器中,为@Valid
使用@RequestBody
注释,如下所示。
public ResponseEntity<?> createEmployee(@Valid @RequestBody Employee employee)