我创建了一个@RestControllerAdvice
来处理所有ErrorResponseException异常(包括我自己的类NtErrorResponseException
,它扩展了ErrorResponseException异常)。
@RestControllerAdvice
public class NtExceptionHandling extends ResponseEntityExceptionHandler {
@ExceptionHandler(NtErrorResponseException.class)
ProblemDetail handleBookmarkNotFoundException(NtErrorResponseException e) {
return e.getBody();
}
}
但是当我尝试使用这个测试来测试它时,我得到了下面的错误:
测试
@Test
void problemTest(@Autowired TestRestTemplate restTemplate) {
final ResponseEntity<ErrorResponseException> problem = restTemplate.getForEntity("/api/hello-world/problem", ErrorResponseException.class);
assertThat(problem.getStatusCode().value()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR.value());
assertThat(problem.getBody()).isNotNull();
}
错误
org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.springframework.web.ErrorResponseException]
(...)
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.web.ErrorResponseException` (no Creators, like default constructor, exist): Throwable needs a default constructor, a single-String-arg constructor; or explicit @JsonCreator
(...)
问题错误为无法构造org.springframework.web.ErrorResponseException
的示例(不存在创建者,如默认构造函数):Throwable需要一个默认构造函数,一个单字符串参数构造函数;或者explicit @JsonCreator,这在ErrorResponseException
没有默认构造函数时是有意义的,但是当它没有默认构造函数时,我应该如何测试它呢?我希望Spring已经使ErrorResponseException类易于反序列化?
我解决这个问题的好办法是什么?
1条答案
按热度按时间myzjeezk1#
Spring Boot从控制器返回的反序列化对象不是
ErrorResponseException
,而是ProblemDetail
。修复: