用于休息的 Spring MVC : How set a Locale value

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

我正在使用 Spring Framework 4.3.2

关于Rest对于POSTPUT会发生以下情况。

对于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 Controller 的另一种方法是通过 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 but服务器:它忽略发送给它的“区域设置”(如果从一开始就没有发送过它怎么办)并使用服务器中可用的默认区域设置。我对这种方法感到困惑。

我想保留 RequestEntityResponseEntity 对象。他们的 API 非常流畅。

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

最佳答案

对于RequestEntity,您应该使用:

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

关于用于休息的 Spring MVC : How set a Locale value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39574080/

相关文章:

java - 从自定义 ItemReader 访问时无法强制转换 FlatFileItemReader

java - Spring MVC 4静态资源未加载到Thymeleaf

spring - Imports/Bean Refs 的属性占位符

spring - 在 Spring 中将默认属性值指定为 NULL

java - RestTemplate 不适用于参数 (URL, Request,Class<String>)

java - Spring Mvc-从数据库中删除用户

java - 使用 spring mvc 提交/绑定(bind)部分对象

java - Spring MVC 表

java - 具有数据驱动凭据的 RESTful 服务客户端无法正常工作

spring - 在 Spring Framework resttemplate 中将请求 header 内容类型设置为 json