我如何在 Quarkus 中定义用于序列化的聊天集?
How i can define chatset for serialization in Quarkus?
我正在尝试通过 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 中设置 -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)
JSON 应编码为 UTF-8、UTF-16 或 UTF-32,参见 https://www.rfc-editor.org/rfc/rfc7159#section-8.1
Jackson 会自动检测它应该支持的 UTF 变体。如 this SO answer 中所述,您可以通过向 ObjectMapper
提供 JsonGenerator
来覆盖此机制:Jackson ObjectMapper with UTF-8 encoding?
在 Quarkus 中,您可以通过 ObjectMapperCustomizer
自定义 ObjectMapper
,如下所述:https://quarkus.io/guides/rest-json#jackson
话虽这么说,但我建议它真的使用 UTF-8(或者 UTF-16/UTF-32,如果您需要增强的字符集),因为它是 Web 服务的标准。
我设法通过更改为 JSONB(Eclipse Yasson 实现)进行序列化并将字符集添加到媒体类型 header。
我正在尝试通过 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 中设置 -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)
JSON 应编码为 UTF-8、UTF-16 或 UTF-32,参见 https://www.rfc-editor.org/rfc/rfc7159#section-8.1
Jackson 会自动检测它应该支持的 UTF 变体。如 this SO answer 中所述,您可以通过向 ObjectMapper
提供 JsonGenerator
来覆盖此机制:Jackson ObjectMapper with UTF-8 encoding?
在 Quarkus 中,您可以通过 ObjectMapperCustomizer
自定义 ObjectMapper
,如下所述:https://quarkus.io/guides/rest-json#jackson
话虽这么说,但我建议它真的使用 UTF-8(或者 UTF-16/UTF-32,如果您需要增强的字符集),因为它是 Web 服务的标准。
我设法通过更改为 JSONB(Eclipse Yasson 实现)进行序列化并将字符集添加到媒体类型 header。