2017-11-16 6 views
0

メディアタイプ=アプリケーション/ xmlのが見つかりませんMessageBodyWriter:私はリクエストのHttpHeadersに応じて、2つの形式でのREST APIのレスポンスを作りたい

@Context 
HttpHeaders headers; 

public Response toResponse(MyValidationException exception) { 
    if(headers.getMediaType().toString().equals(MediaType.APPLICATION_XML)){ 
    return Response.status(Status.BAD_REQUEST).entity(exception.getErrors()).type(MediaType.APPLICATION_XML).build(); 
    }else{ 
    return Response.status(Status.BAD_REQUEST).entity(exception.getErrors()).type(MediaType.APPLICATION_JSON).build(); 
}} 

それはMediaType.APPLICATION_JSONのために働いていますが、のMediaType用.APPLICATION_XML次のエラーが表示されます。

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type=application/xml, type=class java.util.HashMap$EntrySet, genericType=class java.util.HashMap$EntrySet. 

この問題を解決するにはどうすればよいですか?

答えて

0

プロジェクトにjaxb依存関係はありますか?

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-jaxb</artifactId> 
    <version>x.x.x</version> 
</dependency> 

はい場合は、おそらくあなたはラップしようとすることができexception.getErrors()GenericEntityに、応答にその実体を与える(地図ように表示される?):説明するように、

GenericEntity<Map<?, ?>> entity = new GenericEntity.. 

return Response.status(Status.X).entity(entity).type(MediaType.APPLICATION_XML).build(); 
+0

私が書いた例外をキャストするには: GenericEntity <地図<文字列、文字列>>エンティティ=(GenericEntity <地図<文字列、文字列>>)exception.getErrors(); しかし例外があります: java.lang.ClassCastException:java.util.HashMapをjavax.ws.rs.core.GenericEntityにキャストすることはできません –

+0

オブジェクトを直接キャストしないでください。オブジェクトを直接キャストしないで、新たに作成してください: ' – ialex

+0

私は試しましたが、私は投稿の同じ最初の問題があります://GenericEntity > entity = new GenericEntity >(例外.getErrors()){}; –

0

GenericEntity<>を追加しますialexによって、私の問題を解決しました。これは私がやったことです:

GenericEntity<List<?>> genericEntity = new GenericEntity<List<?>> (exception.getErrors()) {}; 
Response.status(Status.BAD_REQUEST).entity(genericEntity).build();