3

我正在尝试通过 ISO-8859-1 编码中的 RESTCLIENT 数据发送到其他系统,但出现错误:“com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 middle byte 0xe3”。

我想将序列化编码更改为 ISO-8859-1 而不是 UTF-8,可以吗?

如果我在发送之前转换为 UTF-8,它可以工作,但我不想要这个选项,因为数据库是 ISO-8859-1。

我在 JVM 中尝试了 set -Dfile.encoding=ISO-8859-1,值已更改但错误仍然存​​在。

javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 middle byte 0xe3
at [Source: (org.jboss.resteasy.specimpl.AbstractBuiltResponse$InputStreamWrapper); line: 1, column: 480] (through reference chain: com.xxxxxxx.xxx.model.scheduler.Scheduler["nmSchedule"])
at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:251)
at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:88)
at org.jboss.resteasy.specimpl.AbstractBuiltResponse.readEntity(AbstractBuiltResponse.java:256)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:163)
at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:62)
at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invokeSync(ClientInvoker.java:151)
at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:112)
at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76)
at com.sun.proxy.$Proxy124.findByIdSchedule(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.microprofile.client.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:149)
at com.sun.proxy.$Proxy125.findByIdSchedule(Unknown Source)
at com.xxxxxxx.xxx.services.materialization.MaterializationSchedulerService.saveScheduler(MaterializationSchedulerService.java:28)
4

2 回答 2

2

JSON 应以 UTF-8、UTF-16 或 UTF-32 编码,请参阅https://www.rfc-editor.org/rfc/rfc7159#section-8.1

Jackson 会自动检测它应该支持的 UTF 变体。如this SO answer中所述,您可以通过向以下内容提供一个JsonGenerator来覆盖此机制ObjectMapperJackson ObjectMapper with UTF-8 encoding?

在 Quarkus 中,您可以按照此处所述自定义ObjectMappervia : https ://quarkus.io/guides/rest-json#jacksonObjectMapperCustomizer

话虽如此,我建议它真的使用 UTF-8(或 UTF-16/UTF-32,如果您需要增强的字符集),因为它是 Web 服务的标准。

于 2020-05-19T07:26:53.180 回答
0

我设法通过更改为 JSONB(Eclipse Yasson 实现)进行序列化,并将字符集添加到媒体类型标头。

于 2020-05-20T13:55:07.303 回答