两种解决方案。
第一种:添加

@JSONField(serialzeFeatures = SerializerFeature.DisableCircularReferenceDetect)

注释在对应出现$ref的属性上。

第二种:在fastJson的配置中:

    public HttpMessageConverters fastJson() {
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        //可以在这里加上相关配置
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteDateUseDateFormat,
                SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteNullBooleanAsFalse);
        //处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        fastConverter.setFastJsonConfig(fastJsonConfig);
        return  new HttpMessageConverters(fastConverter);
    }

其中,前一种解决方案是针对单个出现这个问题的对象,第二个解决方案属于全局配置。
本身出现该问题的原因,是由于fastjson内部的对象引用机智造成的。
fastjson为了方式内存溢出,在对象转换json的时候,如果集合中两个对象a、b同时引用了第三个对象,在转换时首先被a引用,之后再被B引用时,就会使用$ref来代替原有引用,目的是为了防止数据栈溢出。
溢出情况举例。
A对象有个属性是B,引用了B对象,B对象属性中又属性A,引用了A对象,则会出现循环转换导致数据栈溢出。