Wpis z mikrobloga

Ktoś wie jak w #spring #java dostać się do każdego elementu typu "features"?
https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&maxradiuskm=2000.0&latitude=30.21&longitude=12.9
Próbowałem z użyciem Jacksona oraz RestTemplate i bez skutku

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of [Ljava.lang.Object; out of >START_OBJECT token

at [Source: (PushbackInputStream); line: 1, column: 1]


Poniższy kod również nawet nie próbuje odczytać czegoś z zewnętrznego API.
Bez springa miałem wcześniej InputStreamReader -> JSONArray results = myResponse.getJSONArray("features"); i działało
borrow - Ktoś wie jak w #spring #java dostać się do każdego elementu typu "features"?...

źródło: comment_JQJimzUMThCWIusqJSnIcypADbE7cHP7.jpg

Pobierz
  • 13
@borrow: jest jeszcze inna opcja ale mniej ładna
https://www.baeldung.com/jackson-json-to-jsonnode
i całe body potraktować jako string i przekazać do ObjectMappera

coś w tym stylu:

tutaj masz jak dostać w stringu body: https://www.logicbig.com/how-to/code-snippets/jcode-spring-mvc-requestbody.html

a tutaj co dalej:

String bodyRequestAsString = "{"k1":"v1","k2":"v2"}";

ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(bodyRequestAsString);

ale nie polecam tego bo do zarówno nie jest ładne jak i ciężkie w utrzymaniu bo bawisz się bezpośrednio węzłami, dużo wygodniej z
@Blue15: Ok działa :)

@GetMapping("/3")
public Object[] getCostam() {
RestTemplate rest = new RestTemplate();

ResponseEntity responseEntity = restTemplate.getForEntity(url2, DataModel.class);

// in Features class method toString is ovverided to give only "place" subtype
var tempRes = responseEntity.getBody().getFeatures().toArray();

return tempRes;

}
@borrow: no to tworzysz nową klasę XDtoMapper, wrzucasz do niej responseEntity.getBody().getFeatures(), potem już w tej klasie sobie wyciągasz to co chcesz i zwracasz POJO.