Jaxb JAX-RS/Jersey中有什么更好的方法-使用containerResponseFilter或MessageBodyWriter提供程序?

Jaxb JAX-RS/Jersey中有什么更好的方法-使用containerResponseFilter或MessageBodyWriter提供程序?,jaxb,jersey,odata,jax-rs,Jaxb,Jersey,Odata,Jax Rs,我正在使用Jersey服务器开发一个API。我在一个bean中定义了一个公共根元素,当前使用容器响应过滤器将该元素包装在另一个bean的资源响应中。它工作得很好 它基本上返回这个: <transaction> <status>Good</status> <id>1</id> .... </transaction> 我找到了关于设置实现MessageBodyWriter的提供者的在线文档和示例。我可以为每种

我正在使用Jersey服务器开发一个API。我在一个bean中定义了一个公共根元素,当前使用容器响应过滤器将该元素包装在另一个bean的资源响应中。它工作得很好

它基本上返回这个:

<transaction>
   <status>Good</status>
   <id>1</id>
   ....
</transaction>
我找到了关于设置实现MessageBodyWriter的提供者的在线文档和示例。我可以为每种类型提供一个提供者。因此,products注释将具有相应的媒体类型,而isWriteable方法也将检查相应的类型。然后writeTo方法可以更改从资源返回的bean的格式,并将正确的格式包装在其周围。但是,这样一个独特的供应商真的是我们的目的吗?这是实现这三种可能回报的最佳方式吗

我也在考虑只添加到容器响应过滤器类中,我已经必须检查返回的媒体类型,并以这种方式对其进行相应的格式化,但我担心过滤器可能会变得太大,因为它对过滤器做的太多了,不确定这是否真的是一个问题

我还可以在每个资源方法中构建bean并对其进行相应的格式化,但这样做可以节省时间,只需执行一次或三次,并将其应用于返回的每个bean

哪个方向比较好?还有比这两个更好的选择吗


谢谢

编写自己的MessageBodyWriter绝对是正确的选择,因为您有一个与格式相关联的特定媒体类型,并且希望以相同的方式处理对此类媒体类型的所有请求的序列化。

编写自己的MessageBodyWriter绝对是正确的选择,假设您有一个与格式相关联的特定媒体类型,并且您希望以相同的方式处理对此类媒体类型的所有请求的序列化。

这正是我所想的-有意义。目前在过滤器中,我有一组带注释的bean。在writeTo方法中,我处理的是流,因此我不一定要设置bean,而只是添加到流中——我很担心这一点。我弄错了吗?我可以在MessageBodyWriter中使用与我的过滤器中相同的功能吗?只是在退出时将其流式处理?这就是我所想的-有道理。目前在过滤器中,我有一组带注释的bean。在writeTo方法中,我处理的是流,因此我不一定要设置bean,而只是添加到流中——我很担心这一点。我弄错了吗?我可以在MessageBodyWriter中使用与我的过滤器中相同的功能吗?只需在退出时对其进行流式处理即可?
<feed xlmns="http://www.w3.org/2005/Atom"
      xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
      xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
  <title>resource name</title>
  .....
</feed>
"d" : {
  "results" : [
  {
    "__metadata": { 
      "uri" : "http://www.url.com/api/resource" 
    },
    "title" : "reource name",
    ....
  ]}
}