Spring引导如何处理throwable

时间:2017-03-19 13:46:07

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

我制作了一个类似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,所以我尝试了jersey,添加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,因为我提供了上面的示例。所以我一无所知。主要问题是如何处理所有扔掉的东西,但如果你能给我一些关于如何解决Providers问题的建议,我将非常感激。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

最后this帖子帮我处理了所有Throwable,但身份验证例外除外。重要的是使用@EnableWebMvcResponseEntityExceptionHandler。为了处理身份验证异常,我使用this回答。希望它能帮助别人。