2012-09-18 2 views
10

私はJerseyでREST-Webサービスを設定しようとしています。 現時点では、JSONのStringやその他のValue型の正しい表現についてちょっと混乱しています。Jerseyで文字列のJSON表現を返す

{"name":"reini","role":"admin"} 

私の第二の方法は、次のようになります:そのような "良い" JSON文字列が表示されますブラウザでこのメソッドを呼び出すと

@GET 
@Path("user") 
@Produces(MediaType.APPLICATION_JSON) 
public User user() { 
    return new User("reini", "admin"); 
} 

: は、ここでは、2つのスニペットです

@GET 
@Path("hello/{name}") 
@Produces(MediaType.APPLICATION_JSON) 
public String hello(@PathParam("name") String name) { 
    return "Hello " + name + ", it is " + new Date(); 
} 

ブラウザでそのメソッドを呼び出すと、JSON-Stuff(中括弧など)のない純粋な文字列が表示されます。

Hello firefox, it is Tue Sep 18 13:52:57 CEST 2012 

このサービスをdojoツールキットで使用したいと考えています。問題は、私が[handleAs: "json"] - flagを設定するとすぐに2番目のメソッドを取得することです。それは私に "SyntaxError:予期しないトークンH"というエラーを投げます。 "H"は返された文字列の最初の文字です。

So:Stringsやその他の値型の正しいjson表現は何ですか?これらの値を生成するためにメソッドで設定する必要がある注釈は何ですか?

答えて

5

DTOを定義し、Stringを入力する必要があります。したがって、属性として1つの文字列を持つHelloRespクラスを呼び出すことになります。あなたのメソッドでその属性を設定して戻ります。

これはTutorialを確認できます。別のtutorial

あなたの応答を処理していないため、Firefoxにエラーが表示されません。サービスによって返されるものはすべて表示されます。このツールキットは、しかし、JSONとしてREPONSEの処理を開始したが、有効なJSON(JSONが{で始まる)しませんでした

+0

は、それはすべての操作のためにDTOを作成するか、私が使用したい種類ごとにDTOを作成する良いですか? – Reini

+0

各タイプのDTO – SiMet

+1

"JSONは{"で始まります - 間違っています。 http://json.orgによると、引用された文字列リテラルも有効なJSONであり、jerseyはJSON文字列として文字列を正しくシリアル化する機能をサポートする必要があります。 – ddumont

2

あなたはまた、それを返すことができます。

@GET 
@Path("hello/{name}") 
@Produces(MediaType.APPLICATION_JSON) 
public String hello(@PathParam("name") String name) { 
    return "\"Hello " + name + ", it is " + new Date()+'"'; 
} 

が、それは私にとって非常に奇妙に見えるのです。

オブジェクトごとにDTOを作成すると、1つの文字列だけが奇妙に見えます。

もっと良い選択肢はありますか?

+0

二重引用符を使用している理由を説明してください。 ( "")の代わりに: "Something"を返しますか?私はそれに問題があり、なぜ普通の文字列が有効なjsonレスポンスに変換されていないのか理解していない – user1386966

+0

理由は、これがMediaTypeアプリケーションJsonを返すという理由で、 "{\" a \ ":1} "これは文字列ではありません。改善された答えを見る – SiMet

1

文字列を返す場合は、なぜそれをJSON型として定義しますか?

ただ、プレーンテキスト(MediaType.TEXT_PLAIN)としてそれを返す:

@GET 
@Path("hello/{name}") 
@Produces(MediaType.TEXT_PLAIN) 
public String hello(@PathParam("name") String name) { 
    return "Hello " + name + ", it is " + new Date(); 
} 
関連する問題