首页 > 解决方案 > Spring Boot 翻译默认异常

问题描述

1. 我想要做的是像这样为@Size 验证设置默认消息

   @Size(min = 8,max = 255,message = "{validation.size}")

我不想把它放在每个字段上,所以我问是否有任何方法可以设置此消息的全局翻译..

  1. 我想翻译来自 Spring Security 的错误消息,如 Forbidden、Access denied 等

我已经尝试在 messages.properties 中放置类似这样的 spring 安全消息

ExceptionTranslationFilter.insufficientAuthentication=A Custom message
AbstractAccessDecisionManager.accessDenied=A Custom message

但似乎没有工作..

标签: javaspringspring-security

解决方案


你需要一个用@RestControllerAdvice. 在那里添加方法以捕获相关异常,您可以将它们转换为您的响应。如果您愿意,甚至还可以弄乱 http 状态响应代码。

@RestControllerAdvice
@Slf4j
public class MyControllerExceptionHandling {
  @ExceptionHandler(MethodArgumentNotValidException.class)

  @ResponseStatus(BAD_REQUEST)
  public MyErrorMessageDto handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {

    return MyErrorMessageDto
        .builder()
        .cause("Bad something something")
        .build();
  }

}

根据您的控制器验证,查找异常MethodArgumentNotValidExceptionConstraintViolationException您需要处理这些(和其他)。

注意:您为错误返回的 JSON 与您为成功返回的 JSON 一样,与您的客户签订了一份合同,因此请使用谷歌查看其他人所做的事情(在您陷入您希望自己做得更好的事情之前! )。


推荐阅读