SpringBoot响应字符集错误

时间:2018-01-15 16:21:13

标签: java rest spring-boot

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

首先向您展示输出: 这就是它来自Controller: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")));

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

编辑: 这是输出标题的屏幕截图 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通过聊天帮助我

1 个答案:

答案 0 :(得分:3)

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

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

已过时,请改用以下内容:

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

这帮了我大忙。