Spring MVC for Rest:如何设置Locale值

时间:2016-09-19 13:11:29

标签: spring spring-mvc resttemplate spring-mvc-test

我正在使用Spring Framework 4.3.2

RestPOST关于PUT,会发生以下情况。

POST我有以下内容:

@PostMapping(consumes={MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<Void> saveOne(@Validated @RequestBody Persona persona){

观察方法已声明@Validated

我需要进行验证并根据客户端/用户发送的Locale返回错误文本消息。

我可以通过Spring MVC Test来完成,因为我有以下内容:

resultActions = mockMvc.perform(post(uri).contentType(MediaType.APPLICATION_XML)
                     .accept(MediaType.APPLICATION_XML)
                     .locale(locale)
                     .content(...content...))).andDo(print());

观察.locale(locale)部分。

在此之前关于JUnit@Parameters,我能够发送Locale的列表,从而看到不同语言的错误消息。直到这里所有人都会如期待

现在,访问Rest控制器的另一种方法是RestTemplate

我有以下内容:

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);

可悲的是RequestEntity通过post不支持.locale(locale)

即使我添加.header("Accept-Language", locale.toString())它也不起作用,.header("locale", locale.toString())同样需要考虑。

注意:我可以确认何时打印它在服务器中发送预期RequestEntity Locale对象:它会忽略& #39;区域设置&#39;发送它(如果它从来没有从头开始发送)并使用服务器中可用的默认Locale。我对这种方法感到困惑。

我想保留RequestEntityResponseEntity个对象。他们的API很流利。

因此,正确的方法是什么?我的印象是客户端或服务器中的额外配置在某些地方需要它。

1 个答案:

答案 0 :(得分:0)

对于RequestEntity,您应该使用:

.header(HttpHeaders.ACCEPT_LANGUAGE, locale.toLanguageTag());