我有以下控制器:
class Controller {
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/verifyCert", method = RequestMethod.GET)
public void verifyCertificate() throws CertificateExpiredException, CertificateNotYetValidException {
certificate.checkValidity();
}
@ResponseStatus(HttpStatus.FORBIDDEN)
@ExceptionHandler({CertificateExpiredException.class, CertificateNotYetValidException.class})
public void handleCertificateValidityException(Exception e) {}
}
我的目标是,如果证书无效,控制器会重定向到异常处理程序。
答案 0 :(得分:2)
使用standaloneSetup
时,您正在执行的是为特定控制器执行设置。
如果您不想配置整个应用程序上下文(使用webAppContextSetup
而不是standaloneSetup
),可以通过将代码更改为:手动设置异常处理程序:
@Before
public void setup() throws IOException {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller).setHandlerExceptionResolvers(new ExceptionHandlerExceptionResolver()).build();
}
@Test
public void test() throws Exception {
mockMvc.perform(get("/verifyCert.controller").contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andExpect(status().isForbidden());
}
这是有效的,因为ExceptionHandlerExceptionResolver是Spring MVC用于根据@ExceptionHandler
注释处理异常的类
查看one我旧的相关答案,其中涵盖了一个更加困难的案例(在@ControllerAdvice
的某个类中使用@ExceptionHandler
)。
答案 1 :(得分:0)
班级net.scansafe.scancentre21.springmvc.web.easyid.ManageSamlAuthenticationRealmController.verifySecondarySamlSpCertificate(ManageSamlAuthenticationRealmController.java)
中的媒体资源为空。
您可以调试类的方法来查找它。您需要将@Autowired添加到此属性以进行注入。
答案 2 :(得分:-1)
我以这种方式解决了:
`@Test(expected = MyException.class) 公共无效shouldThrowException()会引发IOException,Exception {
//Mock Response Controller
当(client.mymethod(any(MyInputClassOfController.class)))。thenReturn(mockedResponse);
when(innerClassInController.myMethodThatInvokeTheException(mock(MyClass.class)))
.thenThrow(new MyException("message"));
this.mockMvc.perform(
post("/root/search/").contentType(MediaType.APPLICATION_JSON_UTF8)
.content( "null Request to throw the exception")).andExpect(status().isBadRequest());`