ExceptionHandler не вводится - PullRequest
       28

ExceptionHandler не вводится

0 голосов
/ 25 октября 2019

У меня есть REST-Backend, созданный с помощью JHipster. Существуют разные классы исключений на уровне службы и на уровне веб-отдыха. Эти сервисные исключения транслируются ExceptionTranslator, который реализует интерфейс ProblemHandling из org.zalando.problem.spring.web.advice

У меня есть следующий ExceptionTranslator:

@ControllerAdvice
public class ExceptionTranslator implements ProblemHandling, SecurityAdviceTrait {

    @Override
    public ResponseEntity<Problem> process(@Nullable ResponseEntity<Problem> entity, NativeWebRequest request) {
    //generated by jHipster
    }

    @ExceptionHandler(HouseWithoutOwnerServiceException.class)
    public ResponseEntity<Problem> handleHouseWithoutOwnerException(HouseWithoutOwnerServiceException ex, NativeWebRequest request) {
        return create(new HouseWithoutOwnerException(), request);
    }
}    

Класс сервисных исключений:

public class HouseWithoutOwnerServiceException extends RuntimeException {

    public HouseWithoutOwnerServiceException() {
        super("House without owner!");
    }
}

Класс ошибки покоя:

public class HouseWithoutOwnerException extends AbstractThrowableProblem {

    private static final long serialVersionUID = 1L;

    public HouseWithoutOwnerException() {
        super(ErrorConstants.HOUSE_WITHOUT_OWNER_TYPE, "House does not have an owner", Status.CONFLICT);
    }
}

В моем тесте HouseWithoutOwnerServiceException выбрасывается, но не переводится в HouseWithoutOwnerException:

@SpringBootTest(classes = HouseApp.class)
public class HouseControllerIT {

    @Autowired
    private MappingJackson2HttpMessageConverter jacksonMessageConverter;

    @Autowired
    private PageableHandlerMethodArgumentResolver pageableArgumentResolver;

    @Autowired
    private ExceptionTranslator exceptionTranslator;

    private MockMvc restHouseMockMvc;

    @BeforeEach
    public void setup() {
        HouseController houseController = new HouseController(houseService);

        this.restHouseMockMvc = MockMvcBuilders.standaloneSetup(houseController)
            .setCustomArgumentResolvers(pageableArgumentResolver)
            .setControllerAdvice(exceptionTranslator)
            .setMessageConverters(jacksonMessageConverter)
            .build();
    }

    @Test
    @Transactional
    public void createHouseWithoutExistingOwner() throws Exception {
        HouseDTO houseDTO = createHouseDTOWithoutOwner();
        houseDTO.setOwnerId(ownerId + 1); //not existing

        restHouseMockMvc.perform(post("/api/v1/houses")
            .contentType(TestUtil.APPLICATION_JSON_UTF8)
            .content(TestUtil.convertObjectToJsonBytes(houseDTO)))
            .andExpect(status().isConflict());
    }
}

Поэтому я всегда получаю 500 Internal Server Error вместо 409 Conflict. Я уже отладил его, и метод в ExceptionTranslator не введен.

...