我有一个拥有多个字段且指定了JsonView的实体:
public class Client {
@JsonView(Views.ClientView.class)
@Column(name = "clientid")
private long clientId;
@JsonView(Views.ClientView.class)
@Column(name = "name")
private String name
@JsonView(Views.SystemView.class)
@Column(name = "istest")
private boolean istest;
.........
}
视图定义如下:
public class Views {
public interface SystemView extends ClientView {
}
public interface ClientView {
}
}
我还有一个简单的控制器来更新客户端。由于字段istest
设置为SystemView
,我不希望客户更新该字段。
我已阅读订单帖子,必须首先加载客户端手动完成,然后相应地更新参数(在我的情况下为clientId
和name
)。
现在我想获得一个需要更新的字段列表(即标有JsonView
的字段为Views.ClientView.class
)。我尝试了以下但是它没有工作:
ObjectReader reader = objectMapper.readerWithView(SystemView.class);
ContextAttributes attributes = reader.getAttributes();
但是,attributes
在没有任何元素的情况下返回。
有没有办法根据视图获取这个字段列表?
答案 0 :(得分:0)
您可以尝试使用Reflection
喜欢访问和检查课程中字段的注释:
List<Field> annotatedFields = new ArrayList<>();
Field[] fields = Client.class.getDeclaredFields();
for (Field field : fields) {
if (!field.isAnnotationPresent(JsonView.class)) {
continue;
}
JsonView annotation = field.getAnnotation(JsonView.class);
if (Arrays.asList(annotation.value()).contains(Views.SystemView.class)) {
annotatedFields.add(field);
}
}
在上面的示例中,annotatedFields
将包含Client
类中带有JsonView
注释的字段列表,其值包含Views.SystemView.class
。