我正在使用Spring Framework 4.3.2
Rest
和POST
关于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
。我对这种方法感到困惑。
我想保留RequestEntity
和ResponseEntity
个对象。他们的API很流利。
因此,正确的方法是什么?我的印象是客户端或服务器中的额外配置在某些地方需要它。
答案 0 :(得分:0)
对于RequestEntity
,您应该使用:
.header(HttpHeaders.ACCEPT_LANGUAGE, locale.toLanguageTag());