java - 如何创建 MessageBodyWriter 以在 RestEasy 中将自定义对象作为 HTML 返回?

标签 java spring jaxb resteasy

我在 Tomcat 中将 RestEasy 与 Spring 结合使用。我有一个简单的 Controller 方法,我想通过 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");
    }
}

但这并没有改变任何东西。此提供程序的任何方法都不会被调用。我不确定我是否必须在某个地方注册它。所有其他类都是通过类路径扫描自动找到的,所以我想这也适用于提供者。

我很确定我做错了什么或者我忘记了什么。有什么提示吗?

最佳答案

尝试添加一个包含 "text/html"@Produces 注释到你的 fooBar() 方法(我包含了 JSONXML 因为听起来你想要这三个)。当我这样做时,您的 ResultProvider 被调用。让我知道这是否适合您!

@POST
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_HTML })
@Path("fooBar")
public RequestResult fooBar()
{
    return new RequestResult();
}

关于java - 如何创建 MessageBodyWriter 以在 RestEasy 中将自定义对象作为 HTML 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461811/

相关文章:

java - java - 如何在java Spring Boot中实现一个通用服务类?

java - Spring MVC 3.0 访问 session 变量

jaxb - Jersey/JAXB XML 验证错误的自定义错误消息

java - JAXB Ant Task - 从哪里获得 JAR?

java - 无法检索亚马逊凭据

java - 在 Ubuntu 终端中运行可执行 jar 时获取错误文件。<init>

java - 如何从 spring-cloud-netflix-feign 在 Feign-Client 中设置 HostnameVerifier

java - 是否可以创建具有空区域的 AWS s3 存储桶

java - 使用自定义注释的组件扫描

java - JAXB 将 XML 元素解码到 HashMap