RestControllerAdvice无法使用自定义注释

时间:2018-12-05 14:07:26

标签: spring exception-handling spring-annotations spring-restcontroller

我有两个用于两个不同版本API的不同控制器。我也试图区分异常处理。关于此需求,我创建了自定义注释来区分控制器。这是我的代码片段:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiV1 { }

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiV2 { }

@ApiV1
@RequestMapping("/path")
@RestController
public class XYZControllerImpl implements com.xyz.XYZController { ... }  

@ApiV2
@RequestMapping("/v2/path")
@RestController
public class XYZControllerV2Impl implements com.xyz.v2.XYZController { ... }

@RestControllerAdvice(annotations = ApiV1.class)
public class ExceptionHandlerForV1 { ... }

@RestControllerAdvice(annotations = ApiV2.class)
public class ExceptionHandlerForV2 { ... }

问题出在这里,当我运行版本1实现的测试时。 ExceptionHandlerForV1不会捕获异常。该问题还提到了here,该解决方案对我而言不起作用,但似乎我具有所有必需的实现。

如果有人帮助我解决此问题,我将不胜感激。

注意:我们使用的是春季版本5.1.3.RELEASE。另外,ExceptionHandlerForV1在没有注释声明的情况下工作。

这是示例失败的测试用例:

@Test
public void testPostWithValidCredentialsWorks() throws Exception {

    mockServerWith200Response();

    // just POSTing without payload for simplicity
    mockMvc.perform(post(API_PATH)
            .with(createSampleCredentials()))
            .andExpect(status().isBadRequest());
}

这是结果:

java.lang.AssertionError: Status expected:<400> but was:<415>
Expected :400
Actual   :415

0 个答案:

没有答案