Я пробую программы, ориентированное на данные, используя Java 21 весной. Я создал образец класса с проверкой данных, как SO: < /p>
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type",
visible = true
)
@JsonSubTypes({
@JsonSubTypes.Type(value = User.RegularUser.class, name = "regular"),
})
public sealed interface User {
record RegularUser(String id, String name, String type) implements User {
public RegularUser {
if (id == null || id.trim().isEmpty()) {
throw new IllegalArgumentException("User id cannot be null or empty.");
}
}
}
}
< /code>
и мой контроллер REST, как и ExceptionHandler, пытаясь поймать исключение, брошенное из пользователя: < /p>
@ExceptionHandler({HttpMessageConversionException.class})
public String badRequestHandler(Exception ex) {
log.info("Here");
log.error(ex.getMessage(), ex);
return ex.getMessage();
}
@ExceptionHandler({IllegalArgumentException.class})
public String handler(Exception ex) {
log.info("There");
log.error(ex.getMessage(), ex);
return ex.getMessage();
}
@PostMapping("/user")
public String logUser(@RequestBody User user) {
log.info("{}", user);
return user.toString();
}
< /code>
output: < /p>
2025-08-11 10:43:57.371 INFO 15150 [nio-8080-exec-1] c.o.s.w.r.SampleRestController : Here
2025-08-11 10:43:57.371 ERROR 15150 [nio-8080-exec-1] c.o.s.w.r.SampleRestController : JSON parse error: Cannot construct instance of `com.org.sample.model.User$RegularUser`, problem: User id cannot be null or empty.
< /code>
Это кажется довольно неинтуитивным, так как я хотел бы поймать конкретное исключение, и не должен просматривать причины исключения в обработчике исключений, чтобы найти мое конкретное исключение. Как я могу избежать выброса исключения httpmessageconversion, и просто попросить исключение, что и исключительно поймать мое исключение?@PostMapping("/user")
public String logUser(@RequestBody Map userMap) {
log.info("Before: {}", userMap);
var user = objectMapper.convertValue(userMap, User.class);
log.info("After: {}", user);
return user.toString();
}
< /code>
Это также не сработало, так как он все равно бросил бы нелегаларгументирование, вызванную ValueInstantiationException, вызванным моим исключением. (Несмотря на то, что это улавливает нелегаларгументирование, оно не улавливает «мое» исключение, и если я изменю на выброс настраиваемого исключения, например, создание класса пользовательского процесса, оно не удалось)
Подробнее здесь: https://stackoverflow.com/questions/797 ... -in-spring
Как избежать броски httpmessageConversionException, связанные с классами, связанные с весной ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как избежать броски httpmessageConversionException, связанные с классами, связанные с весной
Anonymous » » в форуме JAVA - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как избежать броски httpmessageConversionException, связанные с классами, связанные с весной
Anonymous » » в форуме JAVA - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Org.springframework.http.converter.HttpMessageConversionException: ошибка определения типа
Anonymous » » в форуме JAVA - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Org.springframework.http.converter.httpmessageconversionexception: ошибка типа определения
Anonymous » » в форуме JAVA - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-