春季启动-i18n错误消息

时间:2018-07-31 18:58:34

标签: java spring spring-boot internationalization

将Spring Boot与简单的rest api一起使用时,由于某种原因,我收到一个错误,它是英语的,像这样:

Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.util.Date] for value '2018-07-35'; nested exception is org.joda.time.IllegalFieldValueException: Cannot parse \"2018-07-35\": Value 35 for dayOfMonth must be in the range [1,31]" 

是否可以根据请求语言环境转换所有这些spring boot消息?

1 个答案:

答案 0 :(得分:1)

在春季,错误日志的重要部分通常在消息末尾:

Value 35 for dayOfMonth must be in the range [1,31]"

您是否要延长创建几个月的时间?

对不起,我没读完你的问题。

您无法在本地转换堆栈跟踪,这很糟糕,这意味着您需要了解本机和库函数的所有可能消息,然后创建一些转换文件。

但是,使用try catch可以捕获一些异常并打印自定义消息:

 public void parseDate(String string){
        try{
            Date date = Date.parse(string);
        }catch(IllegalFieldValueException e){
            System.err.println("Date " + string + "is invalid in your local");
        }
    }

我在这里使用了随便打电话来做一个简单的例子。

但是春天并非总是可以做到的,因此GlobalExceptionHandler是您的朋友,这里是我的项目代码中的示例:

@ControllerAdvice
public class GlobalExceptionHandlerController {

    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandlerController.class);

    @ExceptionHandler(UsernameNotFoundException.class)
    public @ResponseBody
    ResponseEntity usernameNotFound(UsernameNotFoundException e) {
        log.info(e.getMessage());
        return new ErrorResponseEntity(HttpStatus.FORBIDDEN, e);
    }

    @ExceptionHandler(AuthenticationException.class)
    public @ResponseBody
    ResponseEntity wrongAuthentication(AuthenticationException e) {
        log.info(e.getMessage());
        return new ErrorResponseEntity(HttpStatus.FORBIDDEN, e);
    }
}
相关问题