Десериализатор Джексона генерирует исключение JsonParseException с неверным средним байтом UTF-8, в то время как строка десериализатора с акцентами - PullRequest
0 голосов
/ 22 января 2019

Пример тела HTTP-запроса

<Name>Cátia</Name>

Пример тела ответа HTTP

<Name>C�tia</Name>

Вот класс запроса

@JacksonXmlRootElement(localName = "Root")
public class Request {

    @JacksonXmlProperty(isAttribute = true, localName = "Id")
    private String id;

    @JacksonXmlProperty(isAttribute = true, localName = "Name")
    private String name;
}

Вот HTTP-запрос

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(HttpHeaders.CONTENT_TYPE, "application/xml;charset=UTF-8");

HttpEntity<> httpEntity = new HttpEntity<>(request, httpHeaders);

responseEntity = restTemplate
    .exchange("URL", HttpMethod.POST, httpEntity, Response.class);

Вот класс ответа

@JsonDeserialize(using = ResponseDeserializer.class)
public class Response {

    @JacksonXmlProperty(localName = "NAME")
    public String name;
}

Вот класс ResponseDeserializer

public class ResponseDeserializer extends JsonDeserializer<Response> {
    @Override
    public Response deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {

        ObjectCodec objectCodec = p.getCodec();
        JsonNode jsonNode = objectCodec.readTree(p);

        return JsonUtils.getObjectMapper().readValue(JsonUtils.getObjectMapper().writeValueAsString(jsonNode),
            Response.class);
    }
}

Вот исключение

JsonNode jsonNode = objectCodec.readTree (p);

метод readTree бросил 'com.fasterxml.jackson.core.JsonParseException' исключение. Недопустимый средний байт UTF-8 0x74 (для char # 2480, байт # 1371)

1 Ответ

0 голосов
/ 21 февраля 2019

Решено добавлением isUTF8Support = true в качестве параметра URL-адреса HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...