字符串参数通常会在Web服务中自动转义吗?

时间:2016-09-09 15:28:10

标签: java web-services cxf

我今天发现,从客户端传递到服务器的字符串参数中的简单%会产生Bad Request 400

由于我对Web服务有基本知识,所以我不知道这是否是正常行为。我是否遗漏了某些东西(是我逃避字符串的责任?)还是我应该在其他地方看看?

客户代码:

@WebMethod(operationName = "push", action = "urn:Push")
public boolean push(String msg);

服务器代码:

@XmlRootElement(name = "push", namespace = "http://ws.something.com/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "push", namespace = "http://ws.something.com/", propOrder = {"arg0"})
public class Push {

    @XmlElement(name = "arg0")
    private java.lang.String arg0;

    public java.lang.String getArg0() {
        return this.arg0;
    }

    public void setArg0(java.lang.String newArg0)  {
        this.arg0 = newArg0;
    }
}

注意:

即使在字符串参数中有%,此客户端/服务器对也可以在我们的开发主机服务器上本地工作。但是,它确实导致另一台主机服务器上的Bad Request 400。因此它可能与服务器主机环境有关。如果是这样,我想暗示可能导致这种情况的原因。

2 个答案:

答案 0 :(得分:1)

很可能默认字符集在您的环境中有所不同。试试这个样本。

    String test = new String("%");
    System.out.println(test);
    byte[] byteArray = test.getBytes("UTF-16");
    test = new String(byteArray);
    System.out.println(test);

它非常简陋,但您会了解字符编码如何影响结果。

请查看此处以获取更多详细信息。 https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html

答案 1 :(得分:-1)

程序员有责任逃避字符串。 Java提供了一个进行编码和解码的类。

请参阅:https://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html及其补充: https://docs.oracle.com/javase/7/docs/api/java/net/URLDecoder.html

import java.net.URLEncoder;
...
public java.lang.String getArg0() {
    return URLEncoder.encode(this.arg0);
}