我有以下 API:
@ApiOperation(value = "Search product by text")
@PostMapping("/get/search")
public ResponseEntity<List<ShopProductDTO>> get(@RequestBody SearchProductRequestDTO search) {
//searching product here using search.getSearchText() value
}
通过 postman 我发送:
{"searchText":"Утюг"}
但是我在日志中收到/看到的内容:
SearchProductRequestDTO{searchText='РЈС‚СРі'}
启用DEBUG后,我看到Http11InputBuffer
日志正文:
{"searchText":"ГђВЈГ‘<U+0082>Г‘<U+008E>ГђВі"}
我所做的(没有一个有帮助):
- 在
application.properties
中添加了以下属性
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.basename=messages
spring.messages.encoding=UTF-8
- 公开
CharacterEncodingFilter
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public CharacterEncodingFilter charsetFilter() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return filter;
}
使用
-Dfile.encoding=UTF-8
参数执行jar
文件在 Postman 中包含以下 header
accept-charset:utf-8
content-type:application/json;charset=utf-8
我还应该做什么?或者我错过了什么?
最佳答案
尝试将您的代码更改为:
@ApiOperation(value = "Search product by text")
@PostMapping(value="/get/search", consumes="application/json;charset=UTF-8")
public ResponseEntity<List<ShopProductDTO>> get(@RequestBody SearchProductRequestDTO search) {
//searching product here using search.getSearchText() value
}
改变就在你的行中
@PostMapping(value="/get/search", consumes="application/json;charset=UTF-8")
关于java - RestController 在 RequestBody 中接收到错误的字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60416661/