从自定义默认 Spring 验证中删除批量

Posted

技术标签:

【中文标题】从自定义默认 Spring 验证中删除批量【英文标题】:Removing bulk from custom default Spring validation 【发布时间】:2019-01-02 02:53:04 【问题描述】:

我正在使用从messages.properties 读取的自定义@NotNull 消息为属性编写一些基本验证。这些消息可以很好地阅读,但是大部分默认 Spring 错误消息仍然如下:

 "Validation failed for argument at index 0 in method: public java.lang.String uk.co.schedulerapi.Scheduler_Rest_Controller.bookAppointment(uk.co.apidefinitions.BookAppointment) throws java.lang.Exception, with 1 error(s): [Field error in object 'bookAppointment' on field 'windowStart': rejected value [null]; codes [NotNull.bookAppointment.windowStart,NotNull.windowStart,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [bookAppointment.windowStart,windowStart]; arguments []; default message [windowStart]]; default message [windowStart parameter is required]] "

是否可以删除所有错误消息并保留我的自定义消息而不进行字符串解析?

【问题讨论】:

【参考方案1】:

是的,您可以使用全局异常处理程序来做到这一点。 这是处理它的方法。

@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class GlobalExceptionHandler 

private static final Logger logger = LogManager.getLogger(GlobalExceptionHandler.class);


@ExceptionHandler(MethodArgumentNotValidException.class, ConstraintViolationException.class)
public void handleException(HttpServletResponse response, Exception ex) 
    //build your custom message
    prepareErrorResponse(response,UNPROCESSABLE_ENTITY,yourCustomMessage);




private void prepareErrorResponse(HttpServletResponse response, HttpStatus status, String apiError) 
    response.setStatus(status.value());
    try(PrintWriter writer = response.getWriter()) 
        new ObjectMapper().writeValue(writer, apiError);
     catch (IOException ex) 
        logger.error("Error writing string to response body", ex);
    

【讨论】:

以上是关于从自定义默认 Spring 验证中删除批量的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从自定义列表中的项目中删除默认的蓝色背景?

从自定义 K8s prometheus 导出器中删除默认变量

Grails - 从自定义验证器闭包调用内置约束

如何从自定义操作中进入删除确认状态 UITableViewCell?

从自定义相册中删除图像

Rails:从自定义验证器调用标准验证