#java #sprin&-boot #serialization #jackson #sprin&-cloud-fei&n
#java #весенняя загрузка #сериализация #джексон #sprin&-cloud-fei&n
Вопрос:
У меня есть два компонента Sprin& Boot, одна запрашиваемая служба и основной компонент, который отправляет запрос через клиент Fei&n. Компонент service использует Zalando problem для создания исключения, и это отображается в структуру в декодере ошибок основного компонента.
Проблема с созданием моего сервисного компонента (в kotlin):
@ExceptionHandler
fun handle(ex: ErrorException, request: NativeWebRequest): ResponseEntity<Problem&&t; {
return when (ex.code) {
ErrorCodes.OPERATION_NOT_ALLOWED,
ErrorCodes.QUERY_ERROR -&&t; create(Status.BAD_REQUEST, Problem.builder()
.withDetail(ex.messa&e)
.with("code", ex.code.name)
.withStatus(Status.BAD_REQUEST)
.build(), request)
}
}
Мой класс декодера ошибок в главном компоненте:
public class ClientErrorDecoder implements ErrorDecoder {
private final ObjectMapper mapper = new ObjectMapper();
@Override
public Exception decode(Strin& methodKey, Response response) {
try {
ClientExceptionDTO clientExDTO = mapper.readValue(response.body().asInputStream(), ClientExDTO.class);
lo&.debu&("Exception from external service: " clientExDTO);
return new ErrorException(clientExDTO.&etDetail(), ErrorCodes.EXTERNAL_SERVICE_ERROR);
} catch (IOException e) {
throw new ErrorException("Failed to process response body.", ErrorCodes.UNPROCESSABLE_RESPONSE);
}
}
@Data
@Builder
@AllAr&sConstructor
@NoAr&sConstructor
@JsonI&noreProperties(i&noreUnknown = true)
private static class ClientExDTO {
private Strin& title;
private Strin& code;
private Strin& detail;
private Strin& status;
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что объект ответа основного компонента не содержит пользовательское свойство «code»: {"title":"Bad Request","status":400,"detail":"Exception occurred in ext service"}
Чего мне не хватает здесь с проблемой Zalando вместе с клиентом Fei&n?