• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

fastjson json 解析 List 返回null 异常

互联网 diligentman 7个月前 (11-02) 74次浏览

前端说  获取 List 数据,返回的是 null 而不是 空数组 [ ]
这就奇怪了, 明明 配置类 全局的json 配置啊, List 对象会null 会转成 空数组

  @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {


        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                // 防止循环引用
                SerializerFeature.DisableCircularReferenceDetect,
                // 空集合返回[],不返回null
                SerializerFeature.WriteNullListAsEmpty,
                // 空字符串返回"",不返回null
//                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteMapNullValue
        );
        fastJsonConfig.setDateFormat(DatePattern.NORM_DATETIME_PATTERN);//时间格式
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);

        //支持的类型。 不需要配置,默认已经支持所有的类型了
//        List<MediaType> fastMediaTypes = new ArrayList<>();
//        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//        fastMediaTypes.add(MediaType.APPLICATION_JSON);
//        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);

        fastJsonHttpMessageConverter.setDefaultCharset(Charset.forName("UTF-8"));

        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
        //解决Controller的返回值为String时,中文乱码问题
        stringConverter.setDefaultCharset(Charset.forName("UTF-8"));
        //解决视图的返回值类型为String时,返回的string字符串带有双引号问题,先执行字符转换
        converters.add(0, stringConverter);

        //使springmvc优先使用fastjson  处理除了 string 类型 所有的数据. 一般也都是 json 格式的数据. 同时提高处理速度
        converters.add(1, fastJsonHttpMessageConverter);

        ParserConfig.getGlobalInstance().setAutoTypeSupport(true); // 开启AutoType
        ParserConfig.getGlobalInstance().addAccept("*"); //设置白名单
    }

解决办法

结果测试 发现 如果 entity 里面的 List 才会生效。
而 如果 直接 返回 数组是不行的

因此只能在 返回Result 上 判断了


 public static Result success(String msg, Object data) {
    return new Result(Code.ReqSuccess, msg, data);
  }

  public static Result success(String msg, List data) {
    if (data == null) {
      // 避免 list  出去前端的时候 null 变成 [] 而不是 null
      data = new ArrayList();
    }
    return new Result(Code.ReqSuccess, msg, data);
  }


@ApiOperation(value = "获取应用系统的菜单权限", notes = "根据主键id,获取应用系统的菜单权限")
  @ApiImplicitParam(name = "ids", value = "主键Id", dataType = "Long", paramType = "query")
  @RequestMapping(value = "/ac/admin/app/acAppMenu/listByIds", method = RequestMethod.POST)
  public Result<List<AcAppMenu>> listByIds(@RequestBody IdsParamVo vo) {
    PreconditionsUtils.checkNotNull(vo.getIds(), "ids不能为空");

    List<AcAppMenu> list =
        (List<AcAppMenu>) acAppMenuService.listByIds(CollUtil.toList(vo.getIds()));
    return Result.success("获取成功", list); // 这样就算是 List  null 也会返回 空数组
  }


程序员灯塔
转载请注明原文链接:fastjson json 解析 List 返回null 异常
喜欢 (0)