2015-01-30 5 views
1

У меня проблема при попытке использовать DropWizard и Views.com.sun.jersey.spi.container.ContainerResponse: Писатель тела сообщения для класса Java

com.sun.jersey.spi.container.ContainerResponse: A message body writer for Java class com.linker.views.TicketView, and Java type class com.linker.views.TicketView, and MIME media type text/html was not found. 
The registered message body writers compatible with the MIME media type are: 
*/* -> 
    com.sun.jersey.core.impl.provider.entity.FormProvider 
    com.sun.jersey.server.impl.template.ViewableMessageBodyWriter 
    com.sun.jersey.core.impl.provider.entity.StringProvider 
    com.sun.jersey.core.impl.provider.entity.ByteArrayProvider 
    com.sun.jersey.core.impl.provider.entity.FileProvider 
    com.sun.jersey.core.impl.provider.entity.InputStreamProvider 
    com.sun.jersey.core.impl.provider.entity.DataSourceProvider 
    com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.ReaderProvider 
    com.sun.jersey.core.impl.provider.entity.DocumentProvider 
    com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter 
    com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider 
    com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General 

Это, как я называю функцию, предполагают, чтобы вернуть мой взгляд

@GET 
    @Path("/list") 
    @Produces(MediaType.TEXT_HTML) 
    public TicketView listTickets() { 
    return new TicketView(); 
    } 

и вот простой вариант моего класса TicketView

public class TicketView extends View { 
    public TicketView(){ 
    super("test.ftl"); 
    } 
} 

и, наконец, вот мой maven, которая затронута (я думаю)

<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-multipart</artifactId> 
    <version>1.18.3</version> 
</dependency> 

Кто-нибудь знает, что я делаю неправильно? или, по крайней мере, помочь мне встать на правильный путь.

+3

ли вы [добавить 'ViewBundle' в' Bootstrap'] (http://dropwizard.io/manual/views. HTML)? –

+0

Я просто собирался написать, что нашел решение: p Я сделал booboo. Я забыл добавить этот пакет –

ответ

1

Решение для моей проблемы было следующим. Как упоминал выше Pesekillet. я забыл добавить viewbundle на моем приложение класса

@Override 
    public void initialize(Bootstrap<SupportServerConfiguration> bootstrap) { 
    bootstrap.addBundle(new ViewBundle()); 
    } 

Это решило мою проблему

0

Где-то в конфигурации вашего приложения в Джерси вы должны зарегистрировать специальную функцию, чтобы включить создателя тела HTML. Если у вас есть Java Base конфигурации это может выглядеть примерно так:

public class RestApplication extends ResourceConfig { 
    public RestApplication() { 
     packages("lv.autentica"); 

     // registering JSON support 
     register(JacksonFeature.class); 
    } 
} 

К сожалению, я не знаю, как именно функция для поддержки сайтов называется. И вы должны проверить, действительно ли вам нужно вернуть HTML в качестве ответа. Это выглядит довольно странно при использовании Джерси.

0

Вы должны реализовать класс писателя тела сообщения для вашего класса com.linker.views.TicketView, как это:

@Provider 
@Produces({MediaType.TEXT_HTML}) 
public TicketViewWriter implements MessageBodyWriter<TicketView> { 

@Override 
public boolean isWriteable(
    final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType 
) { 
    return (
     mediaType.isCompatible(MediaType.valueOf(MediaType.TEXT_HTML)) 
    ) && TicketView.class.isAssignableFrom(type); 
    } 

@Override 
public long getSize(
    final TicketView view, final Class<?> type, final Type genericType, final Annotation[] annotations, 
    final MediaType mediaType 
) { 

    return -1; 
    } 

@Override 
public void writeTo(
    final TicketView view, final Class<?> type, final Type genericType, final Annotation[] annotations, 
    final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders, final OutputStream entityStream 
) throws IOException { 
    try { 
     // your logic here 
    } catch (Exception e) { 
     //log exception 
    } 
    } 
} 

Это только пример, это до вас, чтобы решить, что делать в метод writeTo. Возможно, вам также придется реализовать класс чтения тела сообщения. Посмотрите на this link!

+0

. Самое странное, что я сделал два сервера с Dropwizard. Я использовал спящий режим для первого. Теперь я пытаюсь с помощью jdbc. Но мне никогда не приходилось делать что-то подобное, когда я использовал спящий режим. Может быть, я забыл импортировать что-то, что помогает мне с этим? –

+0

Я думаю, что подход Hibernate для сохранения сущностей в db немного отличается. Возможно, именно поэтому Hibernate не выбрасывал исключение выше. И для чего вам нужен ответ html? –

Смежные вопросы