Can JSR 303 Bean Validation be used with Spring Data Rest?

后端 未结 4 1579
我寻月下人不归
我寻月下人不归 2020-12-14 10:12

I understand from the docs http://docs.spring.io/spring-data/rest/docs/2.1.2.RELEASE/reference/html/validation-chapter.html that I can declare validators with certain prefix

4条回答
  •  Happy的楠姐
    2020-12-14 10:52

    //Edit - Giving more information based on the comment for this answer and changing the code accordingly.

    Related Documentation - http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

    Notes

    //This is making the handler global for the application
    //If this were on a @Controller bean it would be local to the controller
    @ControllerAdvice
    
    //Specifies to return a 400
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    
    //Which exception to handle
    @ExceptionHandler(ConstraintViolationException.class)
    
    //Specifies to make the return value JSON.
    @ResponseBody
    
    //This class if for modeling the error we return.
    //(Could use HashMap also if you feel it's cleaner)
    class ConstraintViolationModel {
    

    This is an exception handler for Spring that should work in spring boot just fine.

    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.validation.ConstraintViolation;
    import javax.validation.ConstraintViolationException;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    @ControllerAdvice
    public class ExceptionHandlingController {
        @ResponseStatus(value = HttpStatus.BAD_REQUEST)
        @ExceptionHandler(ConstraintViolationException.class)
        public @ResponseBody List handleConstraintViolation(
                HttpServletRequest req, final ConstraintViolationException exception) {
            ArrayList list = new ArrayList();
            for (ConstraintViolation violation : exception
                    .getConstraintViolations()) {
                list.add(new ConstraintViolationModel(violation.getPropertyPath()
                        .toString(), violation.getMessage(), violation
                        .getInvalidValue()));
            }
            return list;
        }
    
        private static class ConstraintViolationModel {
            public String field;
            public String message;
            public Object invalidValue;
    
            public ConstraintViolationModel(String field, String message,
                    Object invalidValue) {
                this.field = field;
                this.message = message;
                this.invalidValue = invalidValue;
            }
        }
    }
    

提交回复
热议问题