2016-09-09 20 views
4

今日、クライアントからサーバーに渡された文字列パラメータ内の単純な%Bad Request 400という結果になったことがわかりました。通常、文字列パラメータはWebサービスで自動的にエスケープされますか?

私はWebサービスに関する基本知識を持っているので、これは正常な動作かどうかわかりません。私は何かを逃しましたか(文字列を逃れることに対する私の責任はありますか?

クライアントコード:

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

Serverコード:

@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が表示されます。したがって、サーバーのホスト環境に関連する可能性があります。もしそうなら、私はこれを引き起こす可能性のあることにヒントを持ちたいと思います。

答えて

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

+0

エンコードの問題の場合、他のすべての文字が正しく転送されるのはなぜですか? – ForguesR

+0

文字セットによって異なります。サポートされている文字セットに含まれる場合は正しく出力されます。英語のアルファベットで問題に直面することはほとんどありません。特殊文字やその他の言語文字は、文字セットが間違っていると奇妙な結果をもたらします。私はSystemからデフォルトの文字セットを取得できると思います。あなたはそれをgoogleすることができます。確認する時間があればチェックして対応します。 – Abinash

+0

私はフランス語の文字を使用しており、すべてが正しく転送されています。 – ForguesR

関連する問題