如何在泽西的MessageBodyWriter的writeTo方法中获取anotations值?

时间:2016-08-12 10:40:19

标签: java rest jax-rs jersey-2.0

我正在覆盖MessageBodyWriter的{​​{1}}方法:

WriteTo

有一个@Override public void writeTo(Detail detail, Class<?> type, Type genericType, Annotation[] annotation, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { } 参数。实际上我想从中获取annotation注释,以便我可以根据view返回Detail个数据。

这是我的view代码:

WriteTo

实际上,我想从注释中获取视图名称,以便我可以根据视图返回特定数据。

如何从anotation中获取ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false); mapper.writerWithView(JSONView.CustomerView.class).writeValue(entityStream, detail); 班级名称?

这是我的资源代码:

view

2 个答案:

答案 0 :(得分:0)

我知道您特别感兴趣的是在MessageBodyWriter的自定义实现中获取资源方法注释。但你不需要为你在问题中提到的目的这样做。

JAX-RS的Jackson模块提供了开箱即用的功能,您不需要自己编写代码。引用project page

  

除了注释值类之外,还可以使用Jackson注释的子集与提供者。   以下是支持所有格式的注释的简短列表:

     
      
  • @JsonView可用于定义特定端点的活动视图
  •   
     

[...]

jersey-media-json-jackson工件与jackson-jaxrs-json-provider工件有依赖关系,它为您提供了这样的功能。因此,只需将Jackson配置为您的JSON提供程序(有关详细信息,请参阅此answer),并且将提供开箱即用的@JsonView支持。

答案 1 :(得分:-1)

你可以这样做:

JsonView jsonView = this.getClass().getAnnotation(JsonView.class);

JsonView jsonView = TestDetail.class.getAnnotation(JsonView.class);

您使用的方法:

Method method = this.getClass().getMethod("testDetail"); (or this.getClass().getDeclaredMethod("testDetail"))
JsonView type = method.getAnnotation(JsonView.class);

之后再做:

type.value()