我正在覆盖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
答案 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()