14

Jersey で REST-Webservice をセットアップしようとしています。現時点では、JSON での文字列またはその他の値型の正しい表現について少し混乱しています。以下に 2 つのスニペットを示します。

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

ブラウザでこのメソッドを呼び出すと、次のような「適切な」JSON 文字列が表示されます。

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

私の2番目の方法は次のようになります。

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

Browswer でそのメソッドを呼び出すと、JSON 要素 (中括弧など) を含まない純粋な文字列が表示されます。

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

このサービスを Dojo ツールキットで利用したいと考えています。問題は、[handleAs: "json"]-flag を設定するとすぐに 2 番目のメソッドを取得することです。「SyntaxError: Unexpected token H」というエラーがスローされます。ここで、「H」は返された文字列の最初の文字です。

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

4

3 に答える 3

5

a を定義し、その中DTOに your を入れる必要がありますString。したがってHelloResp、属性として1つの文字列を持つクラスがあります。メソッドでその属性を設定して返します。

このチュートリアルを確認できます。別のチュートリアル

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

于 2012-09-18T12:17:34.237 に答える
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 つの文字列だけでは奇妙に見えます。

より良いオプションはありますか?

于 2013-08-22T09:32:59.220 に答える