gpt4 book ai didi

java - 使用希伯来语发送请求时,特定机器上的 Spring boot 无效 UTF-8 中间字节

转载 作者:行者123 更新时间:2023-11-30 07:56:41 25 4
gpt4 key购买 nike

<分区>

我正在使用 Spring boot mvc,我有一个问题只在我的临时机器上重现,但在本地工作正常。

我正在发送以下 JSON 请求(注意“whatever”字段下的希伯来字符):

{
"messageInitiaterId":"0542258808",
"destinationId":"0544556543",
"whatever":"משהו",
"pushToken":"e2eeb632-8c2c-4ad2-a163-cfeb671d1955",
"androidVersion":"7.1.1",
"deviceModel":"huawei nexus 6p",
"appVersion":"1.42"
}

在本地,它返回一个响应,一切正常。在登台机器上,这是返回的响应:

{
"timestamp": 1485591099485,
"status": 400,
"error": "Bad Request",
"exception":

"org.springframework.http.converter.HttpMessageNotReadableException",
"message": "Could not read document: Invalid UTF-8 middle byte 0x3f\n at [Source: java.io.PushbackInputStream@6996e7d; line: 4, column: 17]; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 middle byte 0x3f\n at [Source: java.io.PushbackInputStream@6996e7d; line: 4, column: 17]",
"path": "/v1/IsRegistered"

}

目前正在使用 Postman 重现此内容。请求的 header 是:

"Content-Type":"application/json; charset=UTF-8"

我还尝试将希伯来语添加到运行 Windows 8 的机器本身,但它似乎没有什么不同。

提前致谢。

编辑:

这是 Controller ,添加了建议的 MediaType 但仍然出现相同的错误:

@Controller
public class IsRegisteredController extends AbstractController {

private final IsRegisteredLogic logic;

@Autowired
public IsRegisteredController(IsRegisteredLogic logic) {
this.logic = logic;
}

@ResponseBody
@RequestMapping(value = "/v1/IsRegistered", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Response<UserDTO> isRegistered(@Valid @RequestBody IsRegisteredRequest request, HttpServletResponse response) {
return logic.execute(request, response);
}
}

EDIT2:

尝试了下面的建议,以及我在网上找到的其他建议,所有这些都没有什么不同。这似乎是一个比我想象的更难的问题。

向 application.properties 添加了以下字段:

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.datasource.connectionproperties=useUnicode=true;characterEncoding=utf-8;

以及以下 bean:

@Bean
public TomcatConnectorCustomizer tomcatConnectorCustomizer() {
return connector -> connector.setURIEncoding("UTF-8");
}

@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return characterEncodingFilter;
}

一切都无济于事。这里发生了什么?当然,Spring boot 可以处理请求中的希伯来语字符......

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com