Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未输入ExceptionHandler_Java_Spring_Exception_Mockmvc - Fatal编程技术网

Java 未输入ExceptionHandler

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

我用JHipster创建了一个REST后端。在服务层和web rest层中有不同的异常类。此服务异常由
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());
    }
}