自定义返回类型前台显示响应数据为null

自定义返回数据类型前台响应json数据没有属性值

浅浅记录一下日常踩坑。 — — !

一、问题起因

自定义了一个返回数据类型,通过Controller控制层 返回自定义类型数据时,前台获取不到返回数据,显示为‘{ }’

  1. 自定义的返回数据类
package cn.zhidasifang.camundaproject.utils;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.io.Serializable;

/**
 * @Description: 统一返回参数类型
 * @ClassName: ResultUtils
 */

@Data
public class ApiResult<T> extends JSONObject implements Serializable {
    private static final long serialVersionUID = 411731814484355577L;
    /**
     * 状态码
     * */
    private int code;
    /**
     * 提示信息
     * */
    private String msg;
    /**
     * 相关数据
     * */
    private T data;

    @Override
    public String toString() {
        return "ApiResult{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
  private ApiResult(int code, String msg){
        this.code = code;
        this.msg = msg;
  }
  private ApiResult(int code, String msg, T data){
        this.code =code;
        this.msg = msg;
        this.data = data;
  }
  /**
   * 成功构造器
   * */
  public static <T> ApiResult<T> success(){
      return new ApiResult<>(ResultCodeEnum.SUCCESS.getCode(),ResultCodeEnum.SUCCESS.getMessage());
  }
  public static <T> ApiResult<T> success(String message){
      return new ApiResult<>(ResultCodeEnum.SUCCESS.getCode(),message);
  }
  public static <T> ApiResult<T> success(T data){
      return new ApiResult<>(ResultCodeEnum.SUCCESS.getCode(),ResultCodeEnum.SUCCESS.getMessage(),data);
  }
  public static <T> ApiResult<T> success(String msg, T data){
      return  new ApiResult<>(ResultCodeEnum.SUCCESS.getCode(),msg,data);
  }
  /**
   * 失败构造器
   * */
  public static <T> ApiResult<T> fail(){
      return new ApiResult<>(ResultCodeEnum.FAIL.getCode(),ResultCodeEnum.FAIL.getMessage());
  }
  public static <T> ApiResult<T> fail(String msg){
      return new ApiResult<>(ResultCodeEnum.FAIL.getCode(),msg);
  }
  public static <T> ApiResult<T> fail(T data){
      return new ApiResult<>(ResultCodeEnum.FAIL.getCode(),ResultCodeEnum.FAIL.getMessage(),data);
  }
  public static <T> ApiResult<T> fail(String msg , T data){
      return new ApiResult<>(ResultCodeEnum.FAIL.getCode(),msg,data);
  }
}

  1. 控制层Controller代码实例

    @ResponseBody
    @PostMapping(value = "/test")
    public ApiResult resultTest(){
        /*类型一 HashMap 正常*/
        HashMap<String, Object> map = new HashMap<>();
        map.put("1","ll");
        map.put("2","xx");
        map.put("3","fff");
        System.out.println("map = " + map);

        /*类型二 自定义对象 正常*/
        TaskVo taskVo = new TaskVo();
        taskVo.setId("123");
        taskVo.setName("流程");
        taskVo.setProcessInstanceId("xxxxx");
        System.out.println("taskVo = " + taskVo);


        /*类型三 自定义返回类型2(含泛型)--响应无数据*/
        ApiResult<Object> success = ApiResult.success("成功",map);
        System.out.println("success = " + success);
        System.out.println("success.getData() = " + success.getData());
        return success;
    }

/**
输出的结果都是正常的!!!!
map = {1=ll, 2=xx, 3=fff}
taskVo = TaskVo(id=123, name=流程, processInstanceId=xxxxx)
success = ApiResult{code=0, msg='成功', data={1=ll, 2=xx, 3=fff}}
success.getData() = {1=ll, 2=xx, 3=fff}

*/

​ 在返回类型设置为 HashMap 和 自定义其他类 时,前台都能正常获取到响应结果的Json类型数据,但是在使用自定义的响应数据类型时,前台显示的数据就是没有对应的属性值!!!

​ 返回自定义返回类型数据时,前台响应结果如下图所示:

在这里插入图片描述

二、问题原因

​ 当返回结果内容打印正常,但是在前台显示不出属性(Key / Value)的情况。目前我检测出来两种原因。

  • 原因一:

    当我们自定义一个返回数据类型时,如果该实体类中的属性 没有设置对应属性的 get/set方法,这就导致在序列化对应属性值时取不到对应的属性值,所有在响应结果中,就不会出现对应的属性值字段。

  • 原因二:

      自定义返回数据类型继承了 JSONObject 接口!!!(我出现的这种错误),就会导致自定义数据类型在响应到前台时,不会显示出任何属性值! 
    

在这里插入图片描述

​ 这种方式导致的原因还待追溯,目前尚不明确是为什么!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值