【问题标题】:Spring boot how to handle throwableSpring Boot 如何处理可抛出对象
【发布时间】:2017-08-10 18:28:55
【问题描述】:

我做了一个这样的项目sample。所以控制器是这样的

package mypackagename.controller;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
@RequestMapping("/")
public class StoresRestController {

    @RequestMapping(method = RequestMethod.GET)
    public String stores() {
        return ...
    }

}

我喜欢处理所有 throwable 并做出我定制的统一响应。问题是我找不到正确执行此操作的指南或示例。

首先,我尝试了ExceptionHandlerThrowable,但没有成功,所以我决定继续。然后,我发现最接近的方法是this,所以我尝试了球衣,添加了类似this 的东西。但它并不适用于所有的投掷物。此外,它通过抱怨无视我的控制器

o.g.jersey.internal.inject.Providers     : A provider mypackagename.controller.StoresRestController registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider mypackagename.controller.StoresRestController will be ignored. 

我搜索了这个错误并找到了this,我没有在我的项目中使用ContainerResponseFilter,因为我提供了上面的示例。所以我一无所知。主要问题是如何处理所有 throwables,但如果您能给我一些关于如何解决 Providers 问题的建议,我将不胜感激。

【问题讨论】:

  • 谢谢,我也试过@ExceptionHandler。但据我了解,它们并非旨在处理所有可投掷物。
  • 实际上,正如我解释的那样,我尝试了带有 throwable 的 ExceptionHandler,但它不起作用,所以我尝试了其他解决方案,例如 jersey。
  • 没有我想捕捉的特殊异常。当我的应用程序抛出任何类型的异常时,我希望有一个统一的响应。例如,我不希望在我的响应中包含“时间戳”,它包含在标准弹簧响应中。
  • 首先,输入try-catch 会使我的控制器变得丑陋!框架必须抓住它们。这是控制器的目的,除非我想自己处理所有事情!其次,授权过程中的异常呢,它们不是控制器!那么框架本身的异常呢?我想在一个地方处理所有这些并有一个统一的响应。
  • 感谢您的回答。通过 sping-boot 异常,我的意思是“未找到”。例如,我想更改此“{“timestamp”:1489933640236,"status":404,"error":"Not Found","message":"No message available","path":"/api/v1 /store/245/sfadf"}" 对此响应 "{"message":"No message available"}"。 @ControllerAdvice@ExceptionHandler 也不能与 Throwable.class 一起使用,我再次对其进行测试。

标签: spring-mvc spring-boot spring-restcontroller throwable


【解决方案1】:

在我的项目中,我使用@ControllerAdvice 来处理我的异常。这是一个例子。希望这可以帮助。只需确保此类在您的组件扫描中,以便它被拾取。

@RestController
@ControllerAdvice
public class StoresExceptionHandler {

    @ExceptionHandler(Throwable.class)
    public ResponseEntity<Object> handleThrowable(final Throwable ex) {
        return new ResponseEntity<Object>("Unable to process request.", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

【讨论】:

    【解决方案2】:

    最后this 帖子帮助我处理了所有Throwables,除了身份验证异常。重要的部分是使用@EnableWebMvcResponseEntityExceptionHandler。为了处理身份验证异常,我使用了this 答案。希望它对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 2017-09-21
      • 1970-01-01
      • 2023-04-04
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      相关资源
      最近更新 更多