【发布时间】: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 并做出我定制的统一响应。问题是我找不到正确执行此操作的指南或示例。
首先,我尝试了ExceptionHandler 和Throwable,但没有成功,所以我决定继续。然后,我发现最接近的方法是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