4


1

メディアタイプアプリケーション/ JSONのライターが見つからない理由

基本的に、消費( application / json)および生成(` application / json`)する落ち着いたサービス(投稿)があります。 このサービスの単一のパラメーターは、注釈付きのJavaオブジェクトです。

`org.jboss.resteasy.client.ClientRequest`を使用してリクエストをサービスに送信しています。 ただし、クライアント側でこの例外が発生し、例外が発生します。

_ content-type `application / json`タイプのライターが見つかりませんでした。 _

これは、いくつかのライブラリーjarが欠落していることを意味しますか、それともapplication / jsonの独自のライターを作成する必要がありますか?

私はresteasy 1.1を使用しています

Mark

3 Answer


6


ラマンは正しいです。 Jettisonは有効なオプションです。 ジャクソンも使用できます。 mavenを使用している場合、pomに次の依存関係を含めるのと同じくらい簡単です。

        org.jboss.resteasy
        resteasy-jackson-provider
        2.3.2.Final

その時点で、次のようなコードを書くことに問題はないはずです。

    SomeBean query = new SomeBean("args")
    request.body("application/json", query);
    ClientResponse response = request.post();


2


実際には同じ問題がありましたが、application / json mimeタイプのjettisonプロバイダーを追加して解決しました。 resteasy 1.1にjettisonプロバイダーが含まれているかどうかはわかりませんが、バージョン1.2には含まれています。 また、jdk 1.6を使用している場合は、javax.xml.stream:stax-api jarファイルを除外する必要があります。除外しないと問題が発生します。

これがその例です。

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name="account")
public class Account {

    private Long id;
    private String accountNo;


    public Account(){}
    public Account(String no)   {
        accountNo=no;
    }


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

    @XmlElement
    public String getAccountNo() {
        return accountNo;
    }
    public void setAccountNo(String a) {
        accountNo = a;
    }

}

およびJAXBクラス:

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;


    @Path("/account")
    public class AccountService {


        @GET
        @Path("/{accountNo}")
        @Produces("application/json")
        public Account getAccount(@PathParam("accountNo") String accountNo) {
                   return new Account(accountNo);
        }

    }

それだけです、良い一日を!


1


以下をリソースクラスまたは例外の原因となっているメソッドに追加します

@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)