java - SpringBoot 响应字符集错误

标签 java rest spring-boot

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

首先向您展示输出:
这是它来自 Controller 的方式: MeinekestraÃe
它应该是 Meinekestraße

这是我的 SpringBoot Controller 的一部分:

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

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

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

问题可以通过添加 来解决
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 通过聊天帮助我

最佳答案

对于那些在 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
这对我有用。

关于java - SpringBoot 响应字符集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266913/

相关文章:

java - 在 Java 中使异步 Web 服务调用成为同步调用

javascript - 使用node.js解析json数组

java - 如何使用 Selenium 获取 td 元素的文本?

java - 有没有一种方法可以将所有大于前一个数字的数字相加?

android - 单击任何按钮刷新选项卡布局中的 fragment

java - 当要获取的字段作为 spring data jpa 中的请求的一部分出现时,我们如何以所需的格式获取 ResultSet?

java - 在 1 毫秒内删除了 0 个过期的偏移量。 (kafka.coordinator.group.GroupMetadataManager)

java - 子线程可以修改其父线程的 Threadlocal 变量吗?

java - Firebase 无法使用类检索数据

mysql - 从一个 Docker 中的另一个 Docker 访问 MariaDB