RestControllerAdvice не работает с пользовательскими аннотациями - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть два разных контроллера для двух разных версий 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.Проблема также упоминается здесь , решение не работает для меня, но, похоже, у меня есть все необходимые реализации.

Если кто-нибудь поможет мне решить эту проблему, я буду признателен.

Примечание: мы используем весеннюю версию 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
...