您的位置:首页 > Web前端 > JavaScript

json传递死循环问题

2015-11-11 21:39 766 查看
可能有时我们需要将某个对象要传给前端,但是因为可能会有互相引用的情况出现,这是json使用所必须面对的。有三个方案,

方案1:写个bean,将相互引用的给去掉。

方案2:用注解将不用的注掉。

方案3:用filter来实现。将不必要的给filter掉。代码实现:

private ObjectMapper objectMapper;
/**
* 过滤属性
*
* <pre>
* 使用方法:
*  先给ObjectMapper添加一个filter,然后还要在需要过滤的类上加@JsonFilter("filterName")注解。
*  比如说要过滤User上的name属性,先
*  filter("myFilter", "name").readAsString(user),并在User类上加@JsonFilter("myFilter")。
*  有点不爽的是如果用另外一个没有添加该filter的ObjectMapper解析的话会报错。
*  如果这个User类已经添加了@JsonFilter("myFilter")注解,但在另外一个地方又要解析它并不想过滤name属性,
*  那只能是Jacksons.me().filter("myFilter", ""),然后在读出来。
* </pre>
*
* @param filterName
*            过滤器的名称
* @param properties
*            要过滤的字段名称
* @return
*/
public Jacksons filter(String filterName, String... properties) {
FilterProvider filterProvider = new SimpleFilterProvider().addFilter(filterName,
SimpleBeanPropertyFilter.serializeAllExcept(properties));
objectMapper.setFilters(filterProvider);
return this;
}
/**
* json转换为java对象
*
* @param json
*            字符串
* @param clazz
*            对象的class
* @return 返回对象
*/
public <T> T fromJsonToObject(String json, Class<T> clazz) {
try {
return objectMapper.readValue(json, clazz);
} catch (Exception e) {
log.error(e.getLocalizedMessage(), e);
throw new RuntimeException(e.getLocalizedMessage());
}
}


filter名称一定要和filter(“myFilter”, “name”)名称一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: