java - 我如何在 Quarkus 中定义用于序列化的聊天集?

标签 java encoding jackson quarkus quarkus-rest-client

我正在尝试通过 ISO-8859-1 编码中的 RESTCLIENT 数据发送到其他系统,但出现错误:“com.fasterxml.jackson.databind.JsonMappingException:无效的 UTF-8 中间字节 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 变体。正如此 SO 答案中所解释的,您可以通过向 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 服务中的标准。

关于java - 我如何在 Quarkus 中定义用于序列化的聊天集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61872764/

相关文章:

java - Jackson用 "pseudo array"对象反序列化json字符串

java - 禁止 Mule ESB 阻止某些请求

java - Spring 和 PostgreSQL 之间的错误编码

java - 使用 spock stub 动态查找器

java - 在 Intent 中传递了 ArrayList 但没有进行任何更改?

python - Python 中的国际字符

c# - 为什么 UTF8Encoding.GetBytes 不发出字节顺序标记?

java - 反序列化时如何获取多态类的java代码中@JsonTypeInfo中定义的属性?

java - 错误 com.fasterxml.jackson.databind.exc.MismatchedInputException : No content to map due to end-of-input

java - 如何使用 Jackson 反序列化对象变量?