【SpringBoot】接口返回值结构与实体类结构不一致的场景

背景

上周参与了一个新项目,刚进来就给了一个新需求,两周上线。我主要是负责编写Java后端。在写的时候发现有一些场景里,前端用到的数据和表里的数据不太一样,有时候要多一些字段,有时候要少一些字段。在此结合我遇到的实际场景,将用到的知识点记录下来。

场景一:Jackson注解------@JsonIgnore

某个接口会返回用户信息,但是我不希望一些敏感信息返回给前端,比如用户的密码。这个时候可以在class的密码字段上添加@JsonIgnore,表示在接口返回的时候不返回该字段。

java 复制代码
public class User{
    @JsonIgnore
	String password;
	// ...
}

场景二:Jackson注解------@JsonUnwrapped

某个接口需要把这个用户信息再封装一层,封装一个所属学校的信息,一起返回回来。这个信息需要在另一个表查出来。这个时候我不可能重新定义一个类把用户的字段又写一遍。这个类和用户类相比,就多了一个学校字段。我的做法就是用继承extends,把用户类继承到这个类上。

但是这样又会遇到一个问题,在返回的时候会返回一个嵌套的对象。而前端希望的是就返回一个对象,不包含其他嵌套对象。这个时候就可以用@JsonUnwrapped添加到用户类字段上,这样就可以实现把字段解耦出来,和学校信息放在同一级的对象字段里,而不是嵌套的对象里。

java 复制代码
public class NewUser extends User {
    String schoolName;
    @JsonUnwrapped
	User user;
}

场景三:Jackson注解------@JsonRawValue

某个接口的某个字段是Json字符串,这样直接返回的话,前端不好取值。这里就用到@JsonRawValue,在接口返回的时候可以自动转成Object对象。

java 复制代码
public class Ob {
	@JsonRawValue
    String jsonString;
}

这里提一句,Jackson本身也有提供ObjectMapper类,可以用来将json对象和String之间的相互转化。

ObjectMapper是Jackson提供的一个类。我主要用到了两个方法:readValue, writeValueAsString

  • readValue用于将json -> Object
  • writeValueAsString用于将Object -> json

场景四:@TableField(exist=False)

这个注解用来传输数据库里没有的、我想临时加上去的字段。

比如之前在写七牛云的项目的时候,存储到七牛云中的资源会有一个名称,这个名称是保存在类里的。如果要访问这个资源,需要先利用七牛云api根据名称构建url,返回这个url给前端,前端才能访问。但问题是,这个构建的这个过程会有时间信息(好像是过一段时间就会失效)。这样就只能在每次请求接口的时候,构建一次url,放到类中,最后返回给前端。

这里就要用到这个字段

java 复制代码
public class Resource {
    String name; // 名称
    @TableField(exist=False)
    String url; // 资源链接
    public void setUrl(String url) {
		this.url = url;
	}
}
相关推荐
冷琴19961 小时前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
九圣残炎2 小时前
【springboot】简易模块化开发项目整合Redis
spring boot·redis·后端
.生产的驴2 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛2 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛2 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪2 小时前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
琴智冰2 小时前
SpringBoot
java·数据库·spring boot
爱码少年2 小时前
springboot工程中使用tcp协议
spring boot·后端·tcp/ip
《源码好优多》3 小时前
基于SpringBoot+Vue+Uniapp的植物园管理小程序系统(2024最新,源码+文档+远程部署+讲解视频等)
vue.js·spring boot·uni-app
计算机学姐3 小时前
基于微信小程序的调查问卷管理系统
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis