Java 未输入ExceptionHandler
我用JHipster创建了一个REST后端。在服务层和web rest层中有不同的异常类。此服务异常由Java 未输入ExceptionHandler,java,spring,exception,mockmvc,Java,Spring,Exception,Mockmvc,我用JHipster创建了一个REST后端。在服务层和web rest层中有不同的异常类。此服务异常由ExceptionTranslator翻译,它实现了org.zalando.problem.spring.web.advice中的ProblemHandling接口 我有以下例外Translator: @ControllerAdvice public class ExceptionTranslator implements ProblemHandling, SecurityAdviceTrait
ExceptionTranslator
翻译,它实现了org.zalando.problem.spring.web.advice中的ProblemHandling
接口
我有以下例外Translator:
@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);
}
}
rest错误类:
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);
}
}
在我的测试中,househithoutownerserviceexception
被抛出,但没有转换为househoutownerserviceexception
:
@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内部服务器错误
,而不是409冲突
。我已经调试过了,但没有输入ExceptionTranslator中的方法。您使用的是哪个版本的spring?我认为这是一个bug,已修复为4.2.0.BUILD-SNAPSHOT,所以请查看它,以及我正在使用的5.1.10.release提交
@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());
}
}