1

spring-kafka で JsonSerializer と JsonDeserializer を使用して、メッセージの生成中にシリアライザーの値を設定しています。メッセージには、特殊文字 (ドイツ語のウムラウト) を含む 1 つのフィールド (orgName) があります。この特殊文字をどのように処理すればよいですか? JsonDeserializer が jackson を使用し、jackson が utf-8 をサポートしていることは知っています。そのため、JsonDeserializer はこのエラーをスローします。

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 middle byte 0x72
 at [Source: [B@403d4534; line: 1, column: 128]
 at [Source: [B@403d4534; line: 1, column: 116] (through reference chain: com.abc-company.kafka.JobRequest["orgName"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:388) ~[jackson-databind-2.8.5.jar:2.8.5]
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:348) ~[jackson-databind-2.8.5.jar:2.8.5]
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1599) ~[jackson-databind-2.8.5.jar:2.8.5]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:359) ~[jackson-databind-2.8.5.jar:2.8.5]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) ~[jackson-databind-2.8.5.jar:2.8.5]
    at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1626) ~[jackson-databind-2.8.5.jar:2.8.5]
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1237) ~[jackson-databind-2.8.5.jar:2.8.5]
    at org.springframework.kafka.support.serializer.JsonDeserializer.deserialize(JsonDeserializer.java:86) ~[spring-kafka-1.1.2.RELEASE.jar:na]
4

2 に答える 2

2

デシリアライザーは UTF-8 を使用していますが、シリアライザーは別のエンコーディング (ISO 8859-1 など) を使用しています。この問題を解決するには、シリアライザーのエンコーディングを UTF-8 に設定する必要があります。

このエラーが発生する理由については、同様の質問に対するこの回答を参照してください。

于 2017-07-05T09:14:53.443 に答える