gpt4 book ai didi

java - 未达到 Spring MVC 中的异常处理

转载 作者:行者123 更新时间:2023-11-29 06:55:27 25 4
gpt4 key购买 nike

我以这种方式声明了一个全局异常处理程序:

@ControllerAdvice
public class GlobalDefaultExceptionHandler {

@ExceptionHandler(value = MissingMandatoryPropertyException.class)
public @ResponseBody ResponseEntity<String> missingMandatoryPropertyException(HttpServletRequest req, MissingMandatoryPropertyException exception) throws Exception {
return new ResponseEntity<String>("Missing mandatory parameter: " + exception.getMessage(), HttpStatus.BAD_REQUEST);
}

}

MissingMandatoryPropertyException 简单地扩展了 RuntimeException,这就是我从 spring boot Controller 中抛出异常的方式:

    if (userId == null){
throw new MissingMandatoryPropertyException("userId");
}

所以,我期望的是 GlobalDefaultExceptionHandler 拦截引发的异常,但由于某种原因它没有发生。

我写这个 junit 来测试异常行为:

@WebAppConfiguration
@SpringApplicationConfiguration(SpringRunner.class)
@TestPropertySource(locations="classpath:/config/local/env.config")
@SuppressWarnings("unused")
public class ExceptionControllerTest {

protected static final Logger logger = LoggerFactory.getLogger(ExceptionControllerTest.class);

protected MockMvc mockPHRMvc;

@Before
public void setup() {
this.mockPHRMvc = MockMvcBuilders.standaloneSetup(new PhrController()).build();
}

@Test public void testGetPhr_missingUserID() {

try {
MvcResult result = mockPHRMvc.perform(get("/api/1.0/phr")).andExpect(status().is(HttpStatus.BAD_REQUEST.value())).andReturn();
} catch (Exception ex) {
logger.error("Exception(): ", ex);
}

}

}

一切似乎都配置正确,但似乎 spring boot 不知道必须使用 GlobalDefaultExceptionHandler 来处理异常。相同的实现适用于 tomcat 下的 spring mvc 应用程序,但不适用于 spring boot。

已更新
Controller 是@RestController

有什么线索吗?

最佳答案

要测试它,您应该将 ControllerAdvice 添加到 mockMvc 中,例如:

@Before
public void setup() {
this.mockPHRMvc = MockMvcBuilders.standaloneSetup(new PhrController()).setControllerAdvice(new GlobalDefaultExceptionHandler()).build();
}

关于java - 未达到 Spring MVC 中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com