为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Spring Boot中国际化API错误?

如何在Spring Boot中国际化API错误?

智慧大石 2019-04-19 18:15:23
我能够将控制器网页请求国际化@RequestMapping(value="/image")public String image(@RequestHeader(name=HEADER_CONSTANTS.ACCEPT_LANGUAGE, required=false) String al) {在参数列表中。但是我试着把它放进去ResponseEntityExceptionHandler,但它没有用。@ControllerAdvice(basePackages="com.example.apis")public class RestExceptionHandler extends ResponseEntityExceptionHandler {     @ExceptionHandler(ApiException.class)     protected ResponseEntity<Object> handleApiException(ApiException ex, @RequestHeader(name=HEADER_CONSTANTS.ACCEPT_LANGUAGE, required=false) String al) {2019-05-13 21:59:59.193 WARN 16052 --- [nio-8080-exec-1] .mmaExceptionHandlerExceptionResolver:无法调用@ExceptionHandler方法:protected org.springframework.http.ResponseEntity com.example.apis.RestExceptionHandler。 handleApiException(com.example.apis.ApiException,java.lang.String中)java.lang.IllegalStateException:无法解析受保护的org.springframework.http.ResponseEntity中索引1处的方法参数com.example.apis.RestExceptionHandler.handleApiException(com.example.apis.ApiException,java.lang.String):不合适“java.lang.String”类型的参数1的解析器它没有@RequestHeader参数。如何Accept-Language在JSON API请求的异常处理程序中获取客户端的HTTP头?Spring Boot 1.5.20
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

@ExceptionHandler的文档

它是无效的语法,请查看方法签名的规则。你可以用它WebRequest来获得Header

@ExceptionHandler(ApiException.class)protected ResponseEntity<Object> handleApiException(ApiException ex, WebRequest request) {
     request.getHeader(HttpHeaders.ACCEPT_LANGUAGE);}

用于处理特定处理程序类和/或处理程序方法中的异常的注释。

使用此注释注释的处理程序方法允许具有非常灵活的签名。它们可以按任意顺序具有以下类型的参数:

  • 异常参数:声明为一般异常或更具体的异常。如果注释本身不通过其value()缩小异常类型,这也可以作为映射提示。

  • 请求和/或响应对象(通常来自Servlet API)。您可以选择任何特定的请求/响应类型,例如ServletRequest / HttpServletRequest。

  • Session对象:通常是HttpSession。此类型的参数将强制存在相应的会话。因此,这样的论证永远不会是空的。请注意,会话访问可能不是线程安全的,特别是在Servlet环境中:如果允许多个请求同时访问会话,请考虑将“synchronizeOnSession”标志切换为“true”。

  • WebRequest或NativeWebRequest。允许通用请求参数访问以及请求/会话属性访问,而不与本机Servlet API绑定。

  • 当前请求区域设置的区域设置(由可用的最具体的区域设置解析程序确定,即Servlet环境中配置的LocaleResolver)。InputStream / Reader用于访问请求的内容。这将是Servlet API公开的原始InputStream / Reader。

  • OutputStream / Writer用于生成响应的内容。这将是Servlet API公开的原始OutputStream / Writer。

  • 模型作为从处理程序方法返回模型映射的替代方法。请注意,提供的模型不预先填充常规模型属性,因此始终为空,以便为特定于异常的视图准备模型


查看完整回答
反对 回复 2019-05-15
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

我根据Deadpool的回答使用了以下内容。org.springframework.context.NoSuchMessageException如果语言包不包含给定消息键的翻译,我会得到例外()。我希望如果.properties文件不包含翻译,可以在一行中默认为英语。


@ExceptionHandler(ApiException.class)

protected ResponseEntity<Object> handleApiException(ApiException ex, Locale locale) {

    String defaultMessage = messages.getMessage(ex.errorMessage, ex.errorArgument, Locale.ENGLISH);

    String localErrorMessage = messages.getMessage(ex.errorMessage, ex.errorArgument, defaultMessage, locale);


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信