Pet*_*ter 3 java rest spring-boot
我的 SpringBoot REST 控制器出现了一些问题。这只是对我们的数据库进行 http GET 调用,并且应该返回一个简单的字符串/json。当我只是在浏览器中或通过我的 angular 3 应用程序调用 URL 时,响应有一些字符集错误,我不知道如何修复它们。我建议,这是一个 UTF-8 问题。
首先向您展示输出:这是来自控制器的方式:MeinekestraÃe ,它应该是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();
}}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作,但输出中没有任何变化。
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
Run Code Online (Sandbox Code Playgroud)
或这个
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
Run Code Online (Sandbox Code Playgroud)
任何其他想法可能是什么问题?数据库不是问题。一切都正确存储在那里。
编辑:这是输出中标题的屏幕截图
以及 json 输出的一部分:

可以通过添加两者来解决问题
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
Run Code Online (Sandbox Code Playgroud)
和这个
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
Run Code Online (Sandbox Code Playgroud)
感谢@dienerd 通过聊天帮助我
对于那些在 Spring Boot 项目中寻找在 @RestController 中强制编码请求/响应的方法的人。
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
Run Code Online (Sandbox Code Playgroud)
已弃用,在您的 application.yaml 或 application.properties 中使用以下内容:
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
Run Code Online (Sandbox Code Playgroud)
这对我有用。
| 归档时间: |
|
| 查看次数: |
4321 次 |
| 最近记录: |