0

私のプログラムは以前は機能していましたが、NetBeans と Glassfish を更新した後、 com.sun.jersey.api.MessageException: A message body writer for Java class java.util.LinkedList, and Java type class java.util. LinkedList、および MIME メディア タイプ application/json が見つかりませんでした

解決策をグーグルで検索するのに数日を費やしましたが、何も機能しません。そこで、小さな概念実証コードを作成しました。

@Path("frend")
@Stateless
public class MyFrend
{
    @Context
    private UriInfo context;

    public MyFrend(){}

    // Throws: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.LinkedList, and Java type class java.util.LinkedList, and MIME media type application/json was not found

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAssets()
    {
        List<Frend> frends = new LinkedList<Frend>();
        frends.add( new Frend() );
        frends.add( new Frend() );

        Response.ResponseBuilder rb = Response.ok( frends, MediaType.APPLICATION_JSON_TYPE );

        Response r = rb.build();
        return r;
    }
}

戻り値の型「Response」を「List」に置き換えると機能しますが、リストがルート要素にラップされ、既存のクライアントとの互換性が失われます。コードは次のとおりです。

@Path("ok")
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Frend> getAssetsOk()
{
    List<Frend> frends = new LinkedList<Frend>();
    frends.add( new Frend() );
    frends.add( new Frend() );
    return frends;
}

{" frend ":[{"id":"0","name":"Bob"},{"id":"0","name":"Bob"}]} を生成します。

必要な間: [{"id":"0","name":"Bob"},{"id":"0","name":"Bob"}]

念のため、ここに私の「Frend」クラスを示します。

@XmlRootElement(name="frend")
public class Frend
{
  public int id;
  public String name = "Bob";
}

どんなアドバイスでも大歓迎です。

どうもありがとう、

--セルゲイ

4

1 に答える 1