Spring Resttemplate XML Parser falsches Mapping


#1

Hallo zusammen ich habe folgendse seltsames Verhalten wenn ich einen XML Request absetze.
Die Response enthält folgendes:

<categories>
<category>
	<cat>
		<id>123</id>
		<title>Hosen</title>
	</cat>
	<cat>
		<id>986</id>
		<title>Herren</title>
	</cat>
</category>

wenn ich die API anfrage (Resttempate exchange) und es in mein Objekt Mappe wird die Id, als Title genommen und das Objekt sieht so aus:

Categories 
Category
	Cat (Array)
		index0:
			id= 0
			title ="986"
		index1:
			id=0
			title="Herren"

Es wird also die ID des eigentlich 2. Index als Title genommen.

Meine Objekte sind wie folgt (Dummy) jeweils mit Getter und Setter, toString und hash Methode:

class Categories {
				Category category;
			}
			
			class Category{
				Cat [] cat;
			}
			
			class Cat {
				int id;
				String title;
			}

Geparsed wird mit JAXB (macht Spring von Haus aus)
Wie könnte ich den Parser austauschen? Ich finde im Code kein Problem, habe das Cat Array schon mit List getauscht und auf Category in Categories als List angelegt, aber die Cat werden einfach nicht korrekt geparsed


#2

Hiiiiilfe ich komme auf keine Lösung :frowning:


#3

Poste mal deinen Controller please


#4

Der liegt fremd, also ist eine fremde API.

Das XML ist well formated, wenn ich einigen Tool glauben darf. Es kommt so an wie oben


#5

Und wie sieht der aufruf deines RestTemplates aus?

Eventuell fehlen ja die JAXB Annotationen an den Klassen.


#6
  HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList( MediaType.TEXT_XML));
        headers.setContentType(MediaType.TEXT_XML);
        HttpEntity<EGHProduct[]> entity = new HttpEntity<>(headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<EGHProduct[]> response = restTemplate.exchange(apiUrl, HttpMethod.GET, entity, EGHProduct[].class);

        return response;

#7

Hab die Lösung, ich muss warum auch immer ignorieren, Gibt also nur Categories mit einer List an Category…keine Ahnung warum das cat im XML steht, aber beim parsen ignoriert wird.