Spring Boot Resttemplate exchange XML

Hallo zusammen,

habe das Problem, dass mein Response-Body immer null ist :( Irgendwas mapped nicht. Ich hoffe jemand kennt sich mit SpringBoot aus und Resttemplate. Vermutlich hab ich bei den Annotationen was zerhauen :/

Edit: hatte die Annotationen auch über den Getter-Methoden, half auch nichts

Folgendes holt die Daten (mit String kommt da auch was)
Code:
 private ApiResponse callExternalApi(String kundenNummer, String password) {
        String url = "https://www.domain.com/xmlapi/api.php?";
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
                .queryParam("cid", kundenNummer)
                .queryParam("auth", password);
        System.out.println(builder.toUriString());

        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML));
        headers.setContentType(MediaType.TEXT_XML);
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity<String> entity = new HttpEntity<>(headers);

        ResponseEntity<ApiResponse> response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, ApiResponse.class);
        return response.getBody();
    }
und hier mein ApiResponse-Objekt:
Code:
@XmlRootElement(name = "API_RESPONSE")
public class ApiResponse {

    @XmlElement(name = "PRODUCTS")
    private Products products;

//Getter, Setter, No-Arg-Constructor und Arg-constructor
}
}
und das Products-Objekt mit einer Liste an "Product"-Objekten
Code:
public class Products {

    @XmlElement(name = "PRODUCT")
    private List<Product> product;
 
    //Getter, Setter, Konstruktor
    }
}
Und das XML was als Response kommt:
XML:
<API_RESPONSE>
  <PRODUCTS>
    <PRODUCT>
    // weitere Werte
    </PRODUCT>
  </PRODUCTS>
<API_RESPONSE>
in der pom.xml hab ich :

XML:
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.8</version>
</dependency>
 
Zuletzt bearbeitet:
Ich glaube der API Anbieter hat was an der API geändert. Wenn ich mir den String ausgeben lasse, sehe ich überall ein \n hinter jedem XML Tag. Hab es jetzt testweise wie folgt gelöst, da klappt es auch. Vermutlich sind diese \n neu sodass es nicht mehr richtig gemapped werden kann?! Anders kann ich es mir nicht erklären, dass es nicht mehr funktionieren soll.

So gehts nun:

Code:
JAXBContext jaxbContext = JAXBContext.newInstance(InnoCigsApiResponse.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(response.getBody());
ApiResponse response = (ApiResponse) unmarshaller.unmarshal(reader);
 
Hm also im Debugging sieht es so aus : 12087

wenn ich mit den wert kopiere und in einen Editor packe, wird es ordentlich formatiert, also nicht alles in eine Zeile wie ich es erwarten würde.

Was ist nun richtig/besser? Mit Marschalling hat es Vorteile oder Nachteile?
 
Ok danke. Also mit dem Marshalling klappt das, echt kurios. Kann aber auch nicht mit Sicherheit sagen, dass diese \n neu sind oder so. Sollte ja hoffentlich nun klappen :) Kann ich die Annotationen weg lassen, wenn ich mit dem Marshaller arbeite?
 
Passende Stellenanzeigen aus deiner Region:

Oben