Springboot 一个注解搞定返回参数key转换 【实用】

以你之姓@ 2023-09-26 04:18 190阅读 0赞

前言

平时在搬砖的时候,大家有没有遇到过这样的一个场景,由于各种不可描述因素导致,

一个接口返回的数据 里面的 key 是 A , 但是客户端(前端) 要求返回的key 不叫 A 叫 Aa 。

也就是返回的值不变,就是key 换了。

例如 :

eeb09dd6d20b4d21b2beeb24faffecf9.png

正文

那么需要怎么做的 ?

① 新写一个类,用于值的返回,拿到值,把属性 get set 一下。

40efe0a39f414cdf99d7241b7b10e122.png

② 也就是本篇文章想提到的 ,使用注解, @JsonProperty

497a945be60c4d5687f638c6afa36eae.png

这个很多人都知道, 绕半天原来是 炒冷饭 ? 且慢。

② 这种方式,其实是一种入侵时调整, 前提是你有权限能够改到 原来的 类的 属性的代码 。

但是也有情况是,这个返回的类,你用的是别人的jar引入的, 那就没办法直接改人家代码。

这时候,大多数的人可能也就只有使用 ① 情况了。

其实不然。

③ 也是这篇想提到的 ,非入侵式的 转换返回数据的key, 同样也是通过注解方式实现, 也就是 @JsonMixin + @JsonProperty

ps : springboot 2.7版本以上 支持 @JsonMixin

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.7.2</version>
  5. <relativePath/>
  6. </parent>

ca3e4de6c4e74fcb94df161a5aa9163d.png

实操示例:

写个模拟的调用接口,拿到返回数据 Student:

  1. @GetMapping("/queryById")
  2. public Student queryById( Integer id){
  3. Student student=new Student();
  4. student.setId(id);
  5. student.setName("JCccc");
  6. student.setAge(20);
  7. student.setMobile("136XXXXXXXX");
  8. return student;
  9. }

可以看到返回值:

43ee0b0bd850459bbb02abcae7822e6a.png

先看 入侵式的, 也就是在原来的返回数据的类上面去使用 @JsonProperty :

@JsonProperty

95017283dd3d4490842e4b5de0e931b9.png

可以看到返回值:

f0f63df0d5754b70ba8a363bb5a079a8.png

再看非入侵式的, 创建一个 抽象类 PhoneKeyConvert , 可以指定单个或多个类, 在返回数据的时候,自动转换key:

@JsonMixin + @JsonProperty

9853c378c5794ab8bd31cb6884ef31dd.png

8402736c968043d9a24b16e5ab06e5aa.png

可以看下返回结果 :

39e76c498d614de1b32b89891ba7e176.png

OK,该篇就到这。

合适的业务场景,合适的技术方案。
敲码有度, 适度。

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读