私は Jersey を使用して REST サービスを構築し、Collection<String>
XML として返したいと考えています。
@GET
@Produces(MediaType.TEXT_XML)
@Path("/directgroups")
public Response getDirectGroupsForUser(@PathParam("userId") String userId) {
try {
Collection<String> result = service.getDirectGroupsForUser(userId, null, true);
// return result; //first try
// return result.toArray(new String[0]); //second try
return Response.ok().type(MediaType.TEXT_XML).entity(result).build(); //third try
} catch (UserServiceException e) {
LOGGER.error(e);
throw new RuntimeException(e.getMessage());
}
}
しかし、私の試みは次の例外を除いて失敗しました。
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: Java クラス java.util.ArrayList、Java タイプ クラス java.util.ArrayList、および MIME メディア タイプ text/xml のメッセージ本文ライターが見つかりませんでした
そして、Google で見つけたその例外に対するすべての結果は、私の状況のように text/xml ではなく text/json を返すことに対処していました。
誰か助けてくれませんか? Response を使用すると、それが XML のルート要素になり、コレクションはその中の文字列要素のリストになると思いました。
ベストアンサー1
使用
List<String> list = new ArrayList<String>();
GenericEntity<List<String>> entity = new GenericEntity<List<String>>(list) {};
Response response = Response.ok(entity).build();
汎用エンティティ ラッパーは、レスポンス ビルダーを使用するときに出力を取得するために機能します。