Verarbeitung von REST API headers

lusitano

Aktives Mitglied
Hallo Leute,

ich habe hier ein Verständnisproblem mit den headers in meinem Controller. Für i18n meiner Anwendung habe ich verschiedene messages files erstellt.
Diese Liegen unter resources/i18n. Dazu habe ich die Klasse I18NConfig.
Java:
@Configuration
public class I18NConfig {

    @Bean
    public AcceptHeaderLocaleResolver localeResolver() {

        final AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
        resolver.setDefaultLocale(Locale.US);
        // TEST Setting System default Locale to US
        Locale.setDefault(Locale.US);

        return resolver;
    }

    @Bean
    public ResourceBundleMessageSource messageSource() {

        final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");

        return messageSource;
    }
}

und die Klasse ValidatorConfig
Java:
@Configuration
@RequiredArgsConstructor
public class ValidatorConfig {

    private final I18NConfig i18NConfig;

    @Bean
    LocalValidatorFactoryBean getValidator() {

        LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
        validatorFactoryBean.setValidationMessageSource(i18NConfig.messageSource());

        return validatorFactoryBean;
    }
}

dazu meinen Controller CustomerController
Java:
@RestController
@RequestMapping("/v1/customers")
@Validated
@Slf4j
@RequiredArgsConstructor
@Tag(name = "Customers API")
public class CustomerController {

    private final CustomerService customerService;

    @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<CustomerResponseDto> saveCustomer(@Valid
                                                            @RequestBody CustomerRequestDto customerRequestDto,
                                                            @RequestHeader HttpHeaders headers) {

        Customer customer = customerService.saveCustomer(customerRequestDto);

        URI location = ServletUriComponentsBuilder
                .fromCurrentRequest()
                .path("/{customerId}")
                .buildAndExpand(customer.getId())
                .toUri();

        log.info("Customer: {} saved.", customerRequestDto);

        return ResponseEntity.created(location).build();
    }

}

Obwohl ich @RequestHeader HttpHeaders headers nicht verarbeite kann ich in Postman über Accept-Language die Fehlermeldungen in einer anderen Sprache ausgeben lassen.

Wie ist den hier die richtige Vorgehensweise?
 

lusitano

Aktives Mitglied
Das ist für mich die Frage.
Ich habe keine Ahnung wie ich die empfangenen header verarbeiten kann.
Ich dachte ich müsste den empfangenen Header verarbeiten z.B. irgendwas in die Richtung

Pseudocode:
Java:
for (String header : headers ) {
    
    acceptLanguage = headerLanguage.get()
}

resolver.changeSystemLanguage(acceptLanguage)
 

mrBrown

Super-Moderator
Mitarbeiter
Also es funktioniert alles so wie du möchtest, du verstehst nur nicht warum?

Oder funktioniert irgendwas nicht so, wie du möchtest?
 

lusitano

Aktives Mitglied
Ja es funktioniert wie ich will. Durch den empfangenen header Accept-Language=de oder Accept-Language=us wird je nachdem die richtige i18n message ausgegeben. Und ja ich verstehe nicht ganz warum das so ist. Weil, wie oben im Pseudocode beschrieben, dachte ich das ich den header verarbeiten muss.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
Z Versuch mit Rest-Api-Tester geben offenbar ein lib Problem Frameworks - Spring, Play, Blade, Vaadin & Co 1
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
L Rest Server über Jersey Low Code starten Frameworks - Spring, Play, Blade, Vaadin & Co 7
Avalon REST API kein Content in Json aus Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 7
Avalon Eventhandling mit Spring REST API Frameworks - Spring, Play, Blade, Vaadin & Co 13
tom.j85 SpringBoot Rest-Application funktioniert nicht - Keine Fehlermeldungen Frameworks - Spring, Play, Blade, Vaadin & Co 13
R Nebenjob im Bereich JEE, Spring, Servlets, REST Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Spring Boot mit Rest, JPA und Frontend Frameworks - Spring, Play, Blade, Vaadin & Co 15
N Spring Boot Rest Relationships Frameworks - Spring, Play, Blade, Vaadin & Co 1
A Spring Rest Api Frameworks - Spring, Play, Blade, Vaadin & Co 18
R Allgemeine Architekturfrage: REST API, Job Queue, Thread Pool unter Spring Kontrolle Frameworks - Spring, Play, Blade, Vaadin & Co 10
M Spring REST @RequestBody HTTP Error 415 Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Rest @RequestParam Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring MVC Rest Multipart Upload funktioniert nicht! Frameworks - Spring, Play, Blade, Vaadin & Co 1
K REST in bestehendes Spring/JSF/Primefaces Projekt einbinden Frameworks - Spring, Play, Blade, Vaadin & Co 0
L Maven, Spring, Tomcat Rest Webservice Tutorial gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 2
T REST Services (Jersey/Spring) mit XSD Validierung vor dem Unmarhalling Frameworks - Spring, Play, Blade, Vaadin & Co 0

Ähnliche Java Themen

Neue Themen


Oben