如何解决RestControllerAdivse无法正常工作的问题?

时间:2020-08-31 04:27:54

标签: spring-boot

我有一个与RestControllerAdvice有关的问题。 我已经建立了一个内部jar文件作为自己的库,并实现了一些异常处理程序。 无论如何,当抛出异常错误时,RestControllerAdvice无法正常工作。

  1. RestControllerAdvice
@RestControllerAdvice
public class ApiControllerHandler {
   @ExceptionHandler(ApiException.class)
   public @ResponseBody
   ApiResponse handleApiRequestException(ApiException e) {
       ApiResponse response = new ApiResponse();
       response.setCode(e.response.getCode());
       response.setMessage(e.response.getMessage());
       return response;
   }
}
  1. 验证器方法
    public static void request(JSONObject jsonReq, String requestKey) throws ApiException{
        if (requestKey.isEmpty()) {
            throw new ApiException("01", "Please input request validate key");
        }
        String key = jsonReq.getString(requestKey);
        if (StringUtils.isEmpty(key)) {
            throw new ApiException("01", requestKey + " Can not be null or empty.");
        }
    }
  1. RestController
  @PostMapping("/")
   public String index(@RequestBody Map<String, Object> map){
       JSONObject jsonObject = new JSONObject(map);
       SPNValidator.request(jsonObject, "username");
       return "Hello";
   }
  1. 请求
{
   "username" : ""

发布此请求时,将引发异常,因为我已经处理了请求,该请求既不为空也不为null 但是我的restControlleradvise无法正常工作,它引发内部异常错误。

注意:如果我使用相同的项目,它会正常工作, 但是当构建为jar文件供其他使用时,此功能不起作用。

谢谢。

1 个答案:

答案 0 :(得分:0)

可能的原因之一

  • 当您在那时以内部JAR的身份进行构建时,spring并不知道JAR中的任何类,因此它不会从jar文件中搜索任何包/类,因此这就是您内部JAR的@RestControllerAdvice无法正常工作的原因< / li>

要解决此问题,请在@ComponentScan中使用您的内部JAR pacakge名称 像下面一样

@ComponentScan(basePackages = {"com.exception.base"})

因此spring在扫描项目文件时将包含ApiControllerHandler

相关问题