我正在使用Spring进行API REST,并且正在尝试创建具有2个验证的新的自定义验证器。
对于每个验证器,我想向用户返回不同的HTTP CODE,但是我坚持使用它,我只知道可以在isValid方法中返回布尔值。
我希望有人可以帮助我,或者给我一种更好的方法来完成这件事。
ReadWrite
AllowEdits
@RestController
@RequestMapping("user")
public class UserController {
@PostMapping
public ResponseEntity<?> addUser(@Valid @RequestBody User
user, Errors errors) {
//Here I don't now How to read just one error from Validator class, I just want to return 1 error using the HTTP CODE
if (errors.hasErrors()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT); //I'm just using a generic but I want to use the returned by Validator which has 2 validations and should return different errors
}
return new ResponseEntity<>(user, HttpStatus.OK);
}
}
public class User {
@NotNull
private final String name;
@NotNull
@UserConstraint
private final Integer age;
public User(@JsonProperty("name") String name, @JsonProperty("age") Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
如您所见,我正在尝试对年龄进行验证,并且我想向用户返回一个不同的HTTP代码。
答案 0 :(得分:1)
您可以抛出ResponseStatusException
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "error message");
答案 1 :(得分:0)
您可以尝试类似的操作:在UserValidator的isValid方法上引发新的异常,例如UnderageUserException。 UnderageException类应扩展RuntimeException,并且您需要使用422的@ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY)对此进行注释。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpStatus.html <----这里您有代码列表。 然后创建带注释的控制器@AdviceController,它将处理所有控制器类中的异常。 编辑:https://www.baeldung.com/exception-handling-for-rest-with-spring 在这里,您对此有一个很好的指南