-1

Long投稿データとしてリソースにlist of を渡そうとしていますが、type is を消費しapplication/xmlます。また、2 つのパス パラメータを渡しています。「メディアタイプがサポートされていません」という例外が発生しています。

これを解決するのを手伝ってください。これはコードであり、私は例外を抱えています..

@POST
    @Path("/temp/{abc}")
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.APPLICATION_XML)
    public List<Long> createUser2(List<User> users,@PathParam("abc") String abc) {
//.................//
        List<Long> listLong=new ArrayList<Long>();
        listLong.add(1L);
        listLong.add(2L);
        System.out.println("temp called");
        return listLong;
    }




> org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:
> MessageBodyWriter not found for media type=application/xml
4

1 に答える 1

5

Long問題は、aまたは aList<Long>を XMLに自動的に変換する方法を知っている変換コードがないことです。少なくとも、含まれている要素の名前が存在しなければならないという情報、および JAXB (デフォルトでサポートされているメカニズム) は、クラスのレベルでそのようなことを適用するだけです。

修正は、適切な JAXB アノテーションを使用してラッパー クラスを作成し、それを返すことです。必要なシリアル化を正確に取得するには、クラスを微調整する必要があるかもしれませんが、それは難しいことではありません。

@XmlRootElement(name = "userinfo")
public class UserInfo {
    @XmlElement
    public List<Long> values;
    // JAXB really requires a no-argument constructor...
    public UserInfo() {}
    // Convenience constructor to make the code cleaner...
    public UserInfo(List<Long> theList) {
        values = theList;
    }
}
@POST
@Path("/temp/{abc}")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
// NOTE THE CHANGE OF RESULT TYPE
public UserInfo createUser2(List<User> users,@PathParam("abc") String abc) {
    //.................//
    List<Long> listLong=new ArrayList<Long>();
    listLong.add(1L);
    listLong.add(2L);
    System.out.println("temp called");
    return new UserInfo(listLong); // <<<< THIS LINE CHANGED TOO
}
于 2013-08-06T09:06:31.913 に答える