在我用ssh框架做图书管理系统的时候,用hibernate对图书和图书分类进行和双向关联。
在取出所有的图书分类并转化成json字符串的时候会报错。
原因是取出的图书类型包含set类型的图书集合,josn-lib转化的时候出现了死循环。
解决方法:
设置过滤器,jsonConfig.setJsonPropertyFilter(new PropertyFilter(){})
此方法有三个参数,第一个是Object类型的,是你要过滤的属性的类型;第二个参数是String类型,是你要过滤的属性的名称;第三个参数是Object类型的,是你要过滤的属性的值(值可能是String或其它类型的,所以用Object)。 返回值是boolean类型的,返回true;就是进行过滤,返回false,就是不进行过滤。
if语句的写法就要根据实际的需要了,比如说我这里要解决死循环,就要实现把BookType图书类型里的Set<Book> books
属性过滤掉,那我的if语句就应该如上面那样写。总而言之就是JSON-lib在转化的时候,会对每个属性都调用这个apply方法,这样我们就要根据实际的业务需要,如果当前属性符合你的if条件,那你就要返回true,进行过滤。这样配置后,再测试,就发现获取Shop的时候死循环问题已经不再出现了。
同理在转换Book图书类的时候也需要同样的处理,由于Book类中的BookType属性的值是我们需要获取的,我们正是需要Book关联查询出BookType,所以用前面那张过滤方式会造成过滤掉我们需要的bookType。所以我们可以进行以下的配置,同样可以解决json转化的死循环,还可以获取我们想要的值。
不直接过滤bookType,等json转换完bookType的时候,准备对bookType中Set<Book>books
进行转换的时候进行过滤,因为正是因为这里造成了死循环,所以我们通过这样配置进行过滤,这样就既解决了死循环问题,又避免了Book里的bookType被过滤掉的问题。
更多解决方案可以参考:http://blog.csdn.net/tomcat_2014/article/details/50624869