【问题标题】:SpringBoot response charset errorsSpringBoot 响应字符集错误
【发布时间】:2018-01-15 16:21:12
【问题描述】:

我的 SpringBoot REST 控制器出现了一些问题。这只是对我们的数据库进行 http GET 调用,并且应该返回一个简单的 String / json。当我在浏览器中或通过我的 Angular 3 应用程序调用 URL 时,响应有一些字符集错误,我不知道如何修复它们。 我建议,这是一个 UTF-8 问题。

首先向您展示输出: 这是它来自控制器的方式:Meinekestraà 它应该是 Meinekestraße

这是我的 SpringBoot 控制器的一部分:

@Controller
public class RecieverController {

@Value("${server}")
private String server;

@Value("${user.token}")
private String token;   

@RequestMapping(value="/reciever", method=RequestMethod.GET, produces = "text/plain;charset=UTF-8")
@ResponseBody
@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
public String getRecieverData(
        @RequestHeader(value="Accept") String accept,
        @RequestHeader(value="Host") String host) {

    final String url = server + "/rest/client/profile";

    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();

    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    headers.set("Auth-Token", token); // user_token

    HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

    ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

    return response.getBody();
}}

我尝试了以下操作,但输出没有任何变化。

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

或者这个

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters()
    .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));

任何其他想法可能是什么问题?数据库不是问题。一切都正确存储在那里。

编辑: 这是输出标题的屏幕截图 以及 json 输出的一部分:

问题可以通过添加两个来解决

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

还有这个

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters()
    .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));

感谢@dienerd 通过聊天帮助我

【问题讨论】:

  • 请包括网络浏览器访问的错误/结果。您是否有任何原因不使用 @RequestMapping 上的消耗设置?
  • @Peter 你试过 "{ 'text': 'cadcda' } ".getBytes("UTF-8");
  • @dienerd 结果是一个有效的 json,只是编码就像上面的例子一样。或者你的意思是什么?能否请您更具体一些,以便我提供信息。
  • @mohit sharma 在您看来我应该如何使用它?我不能只返回 response.getBody().getBytes("UTF-8");这给出了一个错误。

标签: java rest spring-boot


【解决方案1】:

对于那些在 Spring Boot 项目中寻找在 @RestController 中强制编码请求/响应的方法的人。

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

已弃用,在您的 application.yaml 或 application.properties 中使用以下内容:

server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true

这对我有用。

【讨论】:

  • 您好,亲爱的,您能否提供一些详细信息,我对 Spring Boot 完全陌生,并且在发布请求时遇到编码问题
  • 您应该将此配置放在您的 application.yaml 或 application.properties 中,这将配置 spring boot 以强制在 servlet 中进行编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2014-03-18
相关资源
最近更新 更多