Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring验证程序自定义HTTP状态_Java_Spring_Validation_Spring Validator - Fatal编程技术网

Java Spring验证程序自定义HTTP状态

Java Spring验证程序自定义HTTP状态,java,spring,validation,spring-validator,Java,Spring,Validation,Spring Validator,我希望在spring验证中返回自定义HTTP状态422,而不是默认的400 我的验证器: @Component @RequiredArgsConstructor public class EmailUpdateDtoValidator implements Validator { private Errors errors; private EmailUpdateDto emailUpdateDto; @Override public boolean supports(Class<?&g

我希望在spring验证中返回自定义HTTP状态422,而不是默认的400

我的验证器:

@Component
@RequiredArgsConstructor
public class EmailUpdateDtoValidator implements Validator {
private Errors errors;
private EmailUpdateDto emailUpdateDto;

@Override
public boolean supports(Class<?> clazz) {
    return EmailUpdateDto.class.equals(clazz);
}

@Override
public void validate(Object object, Errors errors) {
    this.errors = errors;
    this.emailUpdateDto = (EmailUpdateDto) object;

    validateEmail();
}

private void validateEmail() {
    if (!Email.isValid(emailUpdateDto.getEmail())) {
        errors.rejectValue("email", UserValidationErrorCodes.EMAIL_NOT_VALID.name());
    }
}
}
使用这种设置,我总是得到一个400。如何自定义返回时的HTTP状态


谢谢作为解决方法,您可以定义ExceptionHandler并覆盖默认行为

 @ControllerAdvice
 public class RestExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(MissingServletRequestParameterException.class)
    public ResponseEntity<Object> customHttpStatus() {
        return ResponseEntity.status(422).build();

    }
} 
@ControllerAdvice
公共类RestExceptionHandler扩展了ResponseEntityExceptionHandler{
@ExceptionHandler(MissingServletRequestParameterException.class)
公共响应性customHttpStatus(){
返回ResponseEntity.status(422.build();
}
} 

验证过程将抛出一个
org.springframework.web.bind.MethodArgumentNotValidException
,因此您可以向控制器添加一个异常处理程序:

@Slf4j
@RestController
@RequiredArgsConstructor
public class UserController {
private final EmailUpdateDtoValidator emailUpdateDtoValidator;

@InitBinder("emailUpdateDto")
protected void initEmailValidationBinder(final WebDataBinder binder) {
    binder.addValidators(emailUpdateDtoValidator);
}

@RequestMapping(value = "/users/{hashedId}/email", method = RequestMethod.PUT)
public void updateEmail(@RequestBody @Valid EmailUpdateDto emailUpdateDto) {
    ...
}
}
import org.springframework.web.bind.MethodArgumentNotValidException;

   @ExceptionHandler
    public ResponseEntity<String> handleException(MethodArgumentNotValidException ex) {
        return new ResponseEntity<String>(HttpStatus.UNPROCESSABLE_ENTITY);

    }
import org.springframework.web.bind.MethodArgumentNotValidException;
@例外处理程序
公共响应处理异常(MethodArgumentNotValidException ex){
返回新的ResponseEntity(HttpStatus.UNPROCESSABLE_实体);
}

您可以通过
错误
\
绑定结果
输入控制器方法注入和
EmailUpdateDtoValidator.validate()
显式调用来实现对验证的更多控制