2017-10-03 4 views
2

はジャージーJava Jersey JSONサービスは引用符付きの文字列を返しませんか?ここで

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Object interpretationJson() {       
    String o = "a simple string";  
    return o; 
} 

を使って書かれたシンプルなWebサービスです。このため、応答は次のとおりです。

HTTP/1.1 200 
Content-Type: application/json 
Content-Length: 15 
Date: Mon, 02 Oct 2017 23:18:14 GMT 

a simple string 

はレスポンスボディ内の文字列を引用符で囲むことではないでしょうか?私はこれが有効なJSONだとは思わない。応答は:

HTTP/1.1 200 
Content-Type: application/json 
Content-Length: 15 
Date: Mon, 02 Oct 2017 23:18:14 GMT 

"a simple string" 

これは私に少し混乱を引き起こしました。私はもともと問題がクライアント側にあると思っていましたが、問題はJerseyから返された文字列が有効なJSONではないと思っています - C# Parsing json that may have simple types

+0

なぜ値を設定し、このPOJOクラスを使用して返しますか?引用符で囲まれた文字列を取得するには、エスケープして別の引用符を追加します。正しい文字列ではなく正しいjsonを返す場合、フィールドの値は適切に引用されます – Optional

+0

シリアライザは、返されるオブジェクトを適切にシリアル化する必要があります。引用符のない文字列は有効なJSONではありません。これは簡単な例です。実際のコードでは、オブジェクト "o"は時には単純な文字列ですが、時にはより複雑なオブジェクトです。 –

答えて

2

ここでは、Jacksonの開発者(Tatu Saloranta/cowtowncoder)単純な文字列はこのように扱われます。

これは、文字列が手で触れられないと宣言された理由ではありません。二重引用符 でそれを囲むと、ユーザがまさにそれを生産したかったと仮定すると、そのまま正確に必要な文字、または

書き込み文字列をエスケープJSON文字列として

書き込み入力文字列、すなわち:むしろ、選択は の間であります 出力(手でコード化されたJSONと推定されます)。

ユーザーの意図が何であるかを示すメタデータがないため、Jacksonは控えめで後者の選択を使用して です。 JSON仕様では、JSONオブジェクトとJSON配列が有効なJSONコンテンツとして のみとみなされているため、慎重に考えてください。つまり、 JSONストリングを返すと、無効なJSONが生成されます。 「アンタッチャブル」

Referenced issue...

があるとまったく返されるタイプのジャクソンの用語です。

希望する場合や、いくつかの方法がある場合は、引用符付きの文字列を簡単に返すことができます。しかし、それはあなたの質問ではありませんでした。

+0

ありがとうございます。触ることができない文字列を引用符で囲むことをお勧めする方法はありますか?または次のようなものです:\t \t \tオブジェクトo = getObjectFromSomewhere(); if(o instanceof String){ String s =文字列です。format( "\"%s \ ""、(String)o); return s; } else { return o; } –

-1
public class TestGetterSetter{ 

private String name ; 

public void setName(String name){ 
    this.name = name ; 
} 


public String getName(String name){ 
    return this.name ; 
}} 

このPOJOクラスオブジェクト

関連する問題