Java 服务器从Windows和linux上的数据库返回不同的响应
我有一个数据库(MySql)托管在云上的Linux服务器上。和我的Java应用程序部署在同一台服务器上。我在数据库中有数据,我在html中显示这些数据 当我从LINUX服务器上托管的应用程序中点击API时,会得到垃圾字符 喜欢(Java 服务器从Windows和linux上的数据库返回不同的响应,java,mysql,linux,character-encoding,Java,Mysql,Linux,Character Encoding,我有一个数据库(MySql)托管在云上的Linux服务器上。和我的Java应用程序部署在同一台服务器上。我在数据库中有数据,我在html中显示这些数据 当我从LINUX服务器上托管的应用程序中点击API时,会得到垃圾字符 喜欢(|���59���6.���20������) 当我将intellij中的本地应用程序连接到同一个LINUX数据库时,我会从postman中的本地应用程序获得正确的响应(|毓59年6.月20日缸)。 我的回答实际上包含了日语字符 我试过什么 在浏览器中更改字符集 使用UT
|���59���6.���20������响应正文中的代码>)
当我将intellij中的本地应用程序连接到同一个LINUX数据库时,我会从postman中的本地应用程序获得正确的响应(|毓59年6.月20日缸代码>)。
我的回答实际上包含了日语字符
我试过什么
在浏览器中更改字符集
使用UTF-8字符集对java中的字符串进行编码
在这两种情况下,来自本地计算机的响应和LINUX响应头都是相同的。
只有响应主体不同。我不知道真正的问题是什么
我的示例代码如下。我不能在这里发布实际代码
@Autowired
private EncryptionService encryptionService;
@Autowired
private IdentifierRepository identifierRepository;
private ApplicantRepository applicantRepository;
@GetMapping("applicant/{applicantId}/identifier/{identifierId}")
public ResponseEntity<Identifier> getIdentifier(@PathVariable long applicantId,@PathVariable long identifierId){
Identifier identifier = identifierRepository.findIdentifierById(identifierId);
identifier.setOcrResponse(encryptionService.decrypt(identifier.setOcrResponse()));
return ResponseEntity.ok(identifier);
}
@PostMapping("applicant/{applicantId}/identifier")
public ResponseEntity<Identifier> callbackUrl(@RequestBody Map<String,String> map,@PathVariable long applicantId){
Identifier identifier = new Identifier();
identifier.setApplicant(applicantRepository.findById(applicantId));
identifier.setOcrResponse(encryptionService.encrypt(map.get("abbyOcr")));
identifierRepository.save(identifier);
ResponseEntity.noContent();
}
这些是来自linux的响应头
Access-Control-Allow-Origin: *
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Type: application/json;charset=UTF-8
Date: Wed, 20 Nov 2019 11:52:24 GMT
Expires: 0
Pragma: no-cache
Set-Cookie: JSESSIONID=174FB7AF3BC28922D3169DE1BB12612E; Path=/; HttpOnly
Transfer-Encoding: chunked
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
任何人请告诉我如何解决此问题您必须设置编码。
尝试使用UTF-8编码技术进行响应。为什么要进行否决投票?您确定响应主体确实不同吗?或者它是如何显示的(由您的客户端/终端/应用程序)?实际上,邮递员和html中的显示方式不同。请显示相关代码并说明确切的问题或错误。仅仅描述是不够的。另请参见。@VikramSingh请求是否包含“接受字符集”标题?类似于:“接受字符集:utf-8,iso-8859-1;q=0.5”?不,它与客户机无关,因为我在《邮递员》中也得到了不同的响应。我必须同意这个建议。在通信通道上是否有其他组件可以使用不同的编码?可以是上下文、运行时或其他容器,即使它们位于同一进程中。不,这是对服务的直接调用。您可以尝试检查客户端中的内容吗?我的意思是,它可能试图用错误的编码来解码响应,这是在解码的某个地方。在运行时调试中,您应该能够看到它。当消息被重建时。从标题中,我看到您没有指定任何Accept字符集标题。您也可以尝试设置该选项。取决于你的客户是如何考虑这一点的。我的客户希望它做任何事情。但是我的代码没有进行任何解码。
Access-Control-Allow-Origin: *
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Type: application/json;charset=UTF-8
Date: Wed, 20 Nov 2019 11:52:24 GMT
Expires: 0
Pragma: no-cache
Set-Cookie: JSESSIONID=174FB7AF3BC28922D3169DE1BB12612E; Path=/; HttpOnly
Transfer-Encoding: chunked
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block