在自定义验证程序Spring Rest中返回HTTP CODE

时间:2018-08-15 19:16:30

标签: java spring rest spring-boot spring-rest

我正在使用Spring进行API REST,并且正在尝试创建具有2个验证的新的自定义验证器。

对于每个验证器,我想向用户返回不同的HTTP CODE,但是我坚持使用它,我只知道可以在isValid方法中返回布尔值。

我希望有人可以帮助我,或者给我一种更好的方法来完成这件事。

UserController.java

ReadWrite

User.java

AllowEdits

UserConstraint.java

@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);
  }
 } 

UserValidator.java

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代码。

2 个答案:

答案 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 在这里,您对此有一个很好的指南