#java #json #spring #jackson #spring-cloud-feign
Вопрос:
Я вызываю службу и пытаюсь сохранить ответ в списке объектов.
@FeignClient(name = "service")
public interface ServiceClient {
@RequestMapping(method = RequestMethod.POST, value = "/url",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ApiOperation(value = "process")
List<MyClass> select(@RequestBody String query);
}
Ответ, возвращенный притворным клиентом, выглядит следующим образом
[
{
"segmentId": "Source_2021-09-01_2021-10-01",
"columns": [
"merchantRefNum",
"customerId",
"firstName",
],
"events": [
{
"merchantRefNum": "67456456",
"customerId": rfgvkhbj,
"firstName": "peter",
},
{
"merchantRefNum": "654584856",
"customerId": null,
"firstName": "peter"
}
]
}
]
Мой соответствующий класс-это
class MyClass {
private String segmentId;
private List<String> columns;
private List<Map<String, String>> events;
}
Я могу конвертировать с помощью object mapper для проверки моего класса и json следующим образом
List<MyClass> responses = new ObjectMapper().readValue(jsonString,
new TypeReference<List<MyClass>>(){});
Но когда я звоню притворному клиенту и пытаюсь сохранить ответ, он выдает мне ошибку
List<MyClass> responses = Service.select(query);
feign.FeignException$BadRequest: status 400 reading Service#select(String)
at feign.FeignException.errorStatus(FeignException.java:92)
at feign.FeignException.errorStatus(FeignException.java:86)
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:93)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:149)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78)
at f.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
Не могли бы вы, ребята, пожалуйста, помочь мне?
Комментарии:
1. Эта ошибка не является проблемой преобразования для вашего клиента. Вы вызываете API в службе, но она отвечает неправильным запросом HTTP 400. Вам нужно исправить свои параметры, чтобы они соответствовали требованиям API (возможно, вам не хватает параметров).