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;
}
这里是响应反序列化程序类
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(字符 #2480,字节 #1371)
通过添加 isUTF8Support=true 作为 HTTP URL 参数来解决。