发送带有俄语字母的 xml RestTemplate

Send xml with russian letters RestTemplate

提问人:Egor Tverkov 提问时间:7/19/2022 更新时间:7/19/2022 访问量:156

问:

通过 rest 模板发送带有俄语字母的 xml 时。 在输入的 post 方法中,我得到带有“??????”的 xml

例如 我发送 xml

String xml = 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data id="root">
    <header>
       <XML_NAME>UPDATE</XML_NAME>
    </header>
    <body xsi:type="update" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <record id="" bid="143" number="3432ABS" surname="ПЕТРЕНКО" name="ИВАН" sname="ИВАНОВ">
       </record>
    </body>
</data>

发送方式

public <T> T sendPost(String url, String param, Object xml, Class<T> type) {
    try {
        HttpHeaders xml = new HttpHeaders();
        xml.setContentType(MediaType.TEXT_XML);
        HttpEntity httpEntity = new HttpEntity(entity, xml);
        ResponseEntity<T> responseEntity = restTemplate.postForEntity(String.format("%s?%s", url, param), httpEntity, type);
    
        return responseEntity;
}

在这种方法中

@POST
@Path("xml")
@Consumes(MediaType.TEXT_XML + "; charset=UTF-8")
@Produces(MediaType.APPLICATION_XML + "; charset=UTF-8")
public Response xml(
    @QueryParam("id") BigDecimal id, String xml) throws IOException {}

我明白了

String xml = 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data id="root">
    <header>
        <XML_NAME>UPDATE</XML_NAME>
    </header>
    <body xsi:type="update" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <record id="" bid="143" number="3432ABS" surname="???????" name="????" sname="??????">
        </record>
    </body>
</data>

用@Consumes尝试了各种选项。没有任何帮助。 但是如果我在 post endpoint 我将发送与 postman 相同的 xml,一切都会好起来的。

java xml utf-8 JAX-RS REST模板

评论

0赞 VGR 7/19/2022
您如何检查收到的 XML?您是否在 Windows 命令窗口中打印它?
0赞 Egor Tverkov 7/19/2022
我在调试器中看到了它,但这些值也最终出现在 db(Oracle) 中
0赞 Paul Samsotha 7/19/2022
您是否还需要在 RestTemplate 端设置 charset=UTF-8?
0赞 Egor Tverkov 7/19/2022
@PaulSamsotha restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));这很有帮助。由于

答:

1赞 Egor Tverkov 7/19/2022 #1
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8)); 

帮助了我。