Я использую RestEasy вместе с Spring в Tomcat.У меня есть простой метод контроллера, который я хочу использовать через Ajax (с ответом JSON или XML) и через стандартный запрос браузера (с использованием HTML в качестве ответа).Это работает, когда я использую простые возвращаемые типы данных, такие как строка, но мне нужно вернуть пользовательский объект:
@POST
@Path("fooBar")
public RequestResult fooBar()
{
return new RequestResult();
}
Это объект RequestResult (просто фиктивная реализация для демонстрации):
@XmlRootElement(name = "result")
public final class RequestResult
{
@XmlAttribute
public boolean getWhatever()
{
return "whatever";
}
}
Работает при запросе в формате JSON или XML, но при запросе в формате HTML я получаю сообщение об ошибке Could not find JAXBContextFinder for media type: text/html
.Понятно, что это не может работать, потому что RestEasy не знает, как преобразовать этот объект в HTML.Поэтому я добавил этот тест MessageBodyWriter:
@Provider
@Produces("text/html")
public class ResultProvider implements MessageBodyWriter<RequestResult>
{
@Override
public boolean isWriteable(final Class<?> type, final Type genericType,
final Annotation[] annotations, final MediaType mediaType)
{
return true;
}
@Override
public long getSize(final RequestResult t, final Class<?> type, final Type genericType,
final Annotation[] annotations, final MediaType mediaType)
{
return 4;
}
@Override
public void writeTo(final RequestResult t, final Class<?> type, final Type genericType,
final Annotation[] annotations, final MediaType mediaType,
final MultivaluedMap<String, Object> httpHeaders, final OutputStream entityStream)
throws IOException, WebApplicationException
{
final PrintWriter writer = new PrintWriter(entityStream);
writer.println("Test");
}
}
Но это ничего не меняет.Ни один метод этого провайдера никогда не вызывается.Я не уверен, если я должен зарегистрировать это где-нибудь.Все остальные классы обнаруживаются автоматически при сканировании пути к классам, поэтому я полагаю, что это также происходит с поставщиками.
Я почти уверен, что сделал что-то не так или забыл что-то.Есть намеки?