Cod*_*hai 7 java jackson fasterxml spring-boot
我的Java对象有一些注释只写入的字段,因为它们不应该通过REST接口发送给用户.
@JsonProperty(access = Access.WRITE_ONLY)
private List<Integer> integerList;
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试实现一个admin-controller,应该发送这些字段.我的问题是,我可以使用控制器中的代码更改属性,还是必须为此目的创建新对象,而目标字段不再被注释.我认为这不是一个干净的解决方案,所以我想我在这里错过了一些FasterXML Jackson功能..
在此先感谢您的帮助,
Codehai
小智 2
是的,有一种更简单的方法可以使用 fastXML 注释来做到这一点。
使用fasterXML 创建过滤器,并定义要过滤的字段。属性列表可以硬编码定义,或在运行时计算。例如,在管理控制器中,过滤器列表为空(或部分),而常规控制器的过滤器列表包含值:您正在序列化的类:
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
当您序列化对象时,您可以使用预定义的属性列表来过滤 ( 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |