ich mit Spring Framework arbeite 4.3.2
Spring MVC für Rest: Wie ein Locale Wert
Über Rest
für POST
und PUT
die folgende Situation passiert.
Für POST
Ich habe folgendes:
@PostMapping(consumes={MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<Void> saveOne(@Validated @RequestBody Persona persona){
Beachten Sie die Methode @Validated
erklärt.
Ich brauche die Validierung und die Fehlermeldung zurückgeben, die Locale
vom Client/Benutzer gesendet wurde.
Ich kann es durch Spring MVC Test
, tun dafür möchte ich folgendes haben:
resultActions = mockMvc.perform(post(uri).contentType(MediaType.APPLICATION_XML)
.accept(MediaType.APPLICATION_XML)
.locale(locale)
.content(...content...))).andDo(print());
Beachten Sie die .locale(locale)
Teil.
Bis hier über JUnit
bis @Parameters
Ich kann eine Liste von Locale
s senden und sehe so die Fehlermeldung in verschiedenen Sprachen. Bis hier alles gehen, wie
nun in die andere Richtung der einen Rest-Controller für den Zugriff ist durch RestTemplate
Ich habe folgendes:
RequestEntity<Persona> requestEntity = RequestEntity.post(uri)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.body(personaValid);
....
ResponseEntity<GenericCollection<ValidatedFieldErrorReport>> responseEntity_
= restTemplate.exchange(requestEntity, parameterizedTypeReference);
Leider RequestEntity
durch die post
nicht unterstützt .locale(locale)
Auch wenn ich .header("Accept-Language", locale.toString())
hinzufügen, funktioniert es nicht, gleiche Überlegung für .header("locale", locale.toString())
.
Hinweis: Ich kann bestätigen, wenn ich das RequestEntity
Objekt ausdrucken die Locale
aber im Server erwartet sendet: es ignoriert die ‚locale‘ es gesendet (, wie wenn es nicht von der nie gesendet wurde Anfang) und verwendet den Standard Locale
, der auf dem Server verfügbar ist. Ich bin verwirrt mit diesem Ansatz.
Ich möchte die RequestEntity
und ResponseEntity
Objekte behalten. Ihre API sind fließend.
Also, was ist der richtige Weg ?. Ich habe den Eindruck, dass eine zusätzliche Konfiguration entweder in Client oder Server erforderlich ist.
Welche locale Resolver Haben Sie auf der Server-Seite konfiguriert? – zeroflagL
Ich habe nur definiert, wie '@ Bean' ein' LocaleChangeInterceptor' und 'SessionLocaleResolver' mit' neuen Locale ("en", "US") 'und' registry.addInterceptor (localeChangeInterceptorConfig.localeChangeInterceptor()) ''. Scheint, eine '@ Bohne' entsprechend deiner Frage zu verfehlen –
So liefert dein Resolver immer 'neues Gebietsschema (" en "," US ")'? Und Sie fragen sich, warum das Senden eines Headers "Accept-Language" keine Auswirkung hat? – zeroflagL