22

javaを使用してJSONでWebサービスクライアントにデータを返す簡単な方法はありますか? サーブレット、春などは大丈夫です。

4

9 に答える 9

18

Jerseyを調べる価値があるかもしれません。Jersey を使用すると、安らかな Web サービスを xml や JSON として簡単に公開できます。

例...単純なクラスから始めます

@XmlType(name = "", propOrder = { "id", "text" })
@XmlRootElement(name = "blah")
public class Blah implements Serializable {
    private Integer id;
    private String text;

    public Blah(Integer id, String text) {
        this.id = id;
        this.text = text;
    }    

    @XmlElement
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @XmlElement
    public String getText() { return text; }
    public void setText(String value) { this.text = value; }
}

次に、リソースを作成します

@Path("/blah")
public class BlahResource {
    private Set<Blah> blahs = new HashSet<Blah>();

    @Context
    private UriInfo context;

    public BlahResource() {
        blahs.add(new Blah(1, "blah the first"));
        blahs.add(new Blah(2, "blah the second"));
    }

    @GET
    @Path("/{id}")
    @ProduceMime({"application/json", "application/xml"})
    public Blah getBlah(@PathParam("id") Integer id) {
        for (Blah blah : blahs) {
            if (blah.getId().equals(id)) {
                return blah;
            }
        }
        throw new NotFoundException("not found");
    }
}

そしてそれを公開します。これには、Jersey の ServletContainer を使用するなど、さまざまな方法があります。(web.xml)

<servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

ブラウザを開いてhttp://localhost/blah/1にアクセスします。デフォルトでは、XML 出力が表示されます。FireFox を使用している場合は、TamperData をインストールし、acceptヘッダーをに変更application/jsonして JSON 出力を表示します。

もちろん、それだけではありませんが、Jerseyはそのすべてを非常に簡単にします。

幸運を!

于 2008-09-16T16:02:41.360 に答える
7

Java オブジェクトを JSON に変換するために Flexjson を使用してきましたが、非常に使いやすいことがわかりました。 http://flexjson.sourceforge.net

ここではいくつかの例を示します。

public String searchCars() {
  List<Car> cars = carsService.getCars(manufacturerId);
  return new JSONSerializer().serialize(cars);
}

グラフ全体を送信するための deepSerialize などの優れた機能がいくつかあり、双方向の関係を壊すことはありません。

new JSONSerializer().deepSerialize(user); 

サーバー側で日付をフォーマットすることもしばしば便利です

new JSONSerializer().transform(
  new DateTransformer("dd/MM/yyyy"),"startDate","endDate"
).serialize(contract);
于 2008-09-12T00:52:14.780 に答える
5

私にとって、最高の Java <-> JSON パーサーは XStreamです (そうです、本当に json について話しているのであって、xml について話しているのではありません)。XStream はすでに循環依存関係を処理しており、ドライバーやコンバーターなどを作成できるシンプルで強力な API を備えています。

敬具

于 2008-09-12T01:40:11.513 に答える
3

私はgoogle-gsonが魅力的だと感じました。JSONに変換して元に戻します。http://code.google.com/p/google-gson/非常に柔軟性があり、オブジェクトの複雑さを簡単に処理できます。ジェネリックスのサポートが大好きです。

/*
* we're looking for results in the form
* {"id":123,"name":thename},{"id":456,"name":theOtherName},...
*
* TypeToken is Gson--allows us to tell Gson the data we're dealing with
* for easier serialization.
*/
Type mapType = new TypeToken<List<Map<String, String>>>(){}.getType();

List<Map<String, String>> resultList = new LinkedList<Map<String, String>>();

for (Map.Entry<String, String> pair : sortedMap.entrySet()) {
    Map<String, String> idNameMap = new HashMap<String, String>();
    idNameMap.put("id", pair.getKey());
    idNameMap.put("name", pair.getValue());
    resultList.add(idNameMap);
}

return (new Gson()).toJson(resultList, mapType);
于 2010-03-02T17:31:57.953 に答える
3

http://www.json.org/java/index.htmlには必要なものがあります。

于 2008-09-11T21:41:40.510 に答える
3

うん!json-libをチェックしてください

以下は、一連のドメイン オブジェクトを送信する、私自身のコードからの単純化されたコード スニペットです。

private String getJsonDocumenent(Object myObj) (
    String result = "oops";
    try {
        JSONArray jsonArray = JSONArray.fromObject(myObj);

        result = jsonArray.toString(2);  //indent = 2

    } catch (net.sf.json.JSONException je) {

        throw je;
    }
    return result;
}
于 2008-09-11T21:44:49.007 に答える
1

すでに述べたように、Jersey(JAX-RS impl)は使用するフレームワークです。ただし、JSONとの間のJavaオブジェクトの基本的なマッピングには、チュートリアルが適しています。多くの代替手段とは異なり、奇妙なXML互換性の規則を使用しませんが、オブジェクトとの間で直接マップするクリーンなJSONの読み取りと書き込みを行います。また、null(エントリが欠落しているものとnullを持つものには違いがあります)、空のリストまたは文字列(どちらもnullとは異なります)の問題もありません。

Jacksonは、JAX-RSプロバイダーjarを使用するか、手動でさえも、Jerseyとうまく連携します。同様に、単純な古いサーブレットでも簡単に使用できます。入出力ストリームを取得し、ObjectMapper.readValue()と.writeValue()を呼び出すだけで、それだけです。

于 2009-04-24T18:25:19.937 に答える
1

JSON形式のWebサービスを提供するために、jaxws-jsonを使用しています。プロジェクトhttps://jax-ws-commons.dev.java.net/json/を確認できます。

素敵なプロジェクトです。一度立ち上げれば、その魅力がわかるでしょう。

于 2010-09-21T03:14:41.333 に答える
1

Java の RESTful Web サービスについては、REST Web サービス (コンテナーまたはスタンドアロンのサーバーとクライアントの両方) に非常に強力で柔軟な抽象化を提供し、Spring および JSON とうまく統合するRestlet APIも確認してください。

于 2008-09-15T13:23:22.983 に答える