我的
Java对象有一些注释只写入的字段,因为它们不应该通过REST接口发送给用户.
@JsonProperty(access = Access.WRITE_ONLY) private List<Integer> integerList;
现在我正在尝试实现一个admin-controller,应该发送这些字段.
我的问题是,我可以使用控制器中的代码更改属性,还是必须为此目的创建新对象,而目标字段不再被注释.我认为这不是一个干净的解决方案,所以我想我在这里错过了一些FasterXML Jackson功能..
在此先感谢您的帮助,
Codehai
解决方法
是的,使用fasterXML注释有一种更简单的方法.
使用fasterXML创建过滤器,并定义要过滤的字段.可以使用硬编码定义属性列表,也可以在运行时计算属性列表.
例如,在admin控制器中,过滤器列表为空(或部分),而常规控制器过滤器列表包含值:
您要序列化的类:
@JsonFilter("PersonFilter") public class Person { private List<Integer> integerList; private Integer creditCardNUmber; private String firstName; private String lastName; public static FilterProvider getFilter(){ Set<String> fieldsToFilter= new HashSet<>(Arrays.asList("creditCardNUmber","integerList"); SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter .serializeAllExcept(fieldsToFilter); FilterProvider filters = new SimpleFilterProvider() .addFilter("PersonFilter",theFilter); return filters; } }
序列化对象时,可以使用预定义的属性列表进行过滤(public static FilterProvider getFilter(){..}),或者在运行时定义它们.
public static String GetObjectAsStringWithFilter(FilterProvider filters,Object jsonObject) { if (jsonObject == null) { return null; } String objectAsString = null; try { objectAsString = objectMapper.writer(filters).writeValueAsString(jsonObject); } catch (Exception e) { ... } return objectAsString; }