gpt4 book ai didi

带有特殊字符的 Java Restful 服务编码

转载 作者:行者123 更新时间:2023-11-30 11:40:51 25 4
gpt4 key购买 nike

我的 POST 请求有问题。我必须接收一条 XML 消息并使用 JAXB 对其进行解析。一切正常,但是当消息中包含特殊字符时,例如

<?xml version="1.0" encoding="UTF-8"?>
<sending>
<sms>
<message>España</message>
</sms>
</sending>

它抛出错误请求错误 (400)客户端发送的请求在语法上不正确(错误请求)。

这是我处理xml消息的代码

@POST
@Path("smsSendPost")
@Produces(MediaType.APPLICATION_XML)
public Response smsSendPost(JAXBElement<Sending> xml){
Sending sending = xml.getValue();

//Process the message
}

我使用 tomcat 来测试它。

谁能帮我解决这个问题?

更新:我刚刚发现问题的原因是 tomcat,当我使用 ISO-8859-1 编码通过 POST 发送请求时,服务工作正常。解决方案是更改tomcat的编码。

最佳答案

内容类型可能是问题所在,但这取决于您在客户端的 POST 中生成的内容类型以及接收端的 XML 解析器使用的字符集。

在像这样的许多情况下可行的一种替代方法是在 XML 中使用 CDATA(未解析的字符数据) block ,其中可以出现特殊字符。

<sending>
<sms>
<message><![CDATA[España]]></message>
</sms>
</sending>

默认情况下,XML 解析器将尝试解析 XML 消息中的所有文本。 CDATA block 告诉 XML 解析器不要解析包含在 CDATA block 中的字符。

如果您接收此消息的服务无法识别该字符,它可能会出错或假设 XML 格式不正确并抛出您看到的 400。

关于 CDATA block 的更多信息:http://www.w3schools.com/xml/xml_cdata.asp

关于带有特殊字符的 Java Restful 服务编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com