news 2026/2/3 6:44:19

Gson bean getxxx,怎么才能返回给前端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gson bean getxxx,怎么才能返回给前端

使用Gson将Java对象转换为JSON返回给前端,有以下几种常见方式:

1.基本POJO序列化(推荐)

定义Java Bean

public class User { private Long id; private String name; private Integer age; private Date createTime; // Getter/Setter 方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } }

转换为JSON返回

@RestController @RequestMapping("/api") public class UserController { @GetMapping("/user") public String getUser() { User user = new User(); user.setId(1L); user.setName("张三"); user.setAge(25); user.setCreateTime(new Date()); Gson gson = new Gson(); return gson.toJson(user); } // 或者使用@ResponseBody自动转换 @GetMapping("/user2") @ResponseBody public User getUser2() { User user = new User(); user.setId(1L); user.setName("李四"); user.setAge(30); return user; } }

2.使用@SerializedName自定义字段名

public class Product { @SerializedName("product_id") private Long id; @SerializedName("product_name") private String name; @SerializedName("current_price") private Double price; // Getter/Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } }

3.配置Gson实例(日期格式化、空值处理等)

@Configuration public class GsonConfig { @Bean public Gson gson() { return new GsonBuilder() .setDateFormat("yyyy-MM-dd HH:mm:ss") // 日期格式化 .serializeNulls() // 序列化null值 .setPrettyPrinting() // 美化输出 .create(); } // 或者使用 excludeFieldsWithoutExposeAnnotation @Bean public Gson gsonWithExpose() { return new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() // 只序列化有@Expose注解的字段 .create(); } }

4.统一返回结果封装

// 统一返回结果类 public class Result<T> { private Integer code; private String message; private T data; public static <T> Result<T> success(T data) { Result<T> result = new Result<>(); result.setCode(200); result.setMessage("success"); result.setData(data); return result; } public static <T> Result<T> error(String message) { Result<T> result = new Result<>(); result.setCode(500); result.setMessage(message); return result; } // Getter/Setter public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; } } // 控制器中使用 @RestController @RequestMapping("/api") public class ApiController { @Autowired private Gson gson; @GetMapping("/data") public String getData() { List<User> userList = new ArrayList<>(); // ... 添加数据 Result<List<User>> result = Result.success(userList); return gson.toJson(result); } }

5.使用@Expose注解控制序列化

public class Order { @Expose private Long id; @Expose private String orderNo; @Expose(serialize = false) // 序列化时排除 private String internalCode; private String remark; // 没有@Expose注解,默认不序列化 // Getter/Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getOrderNo() { return orderNo; } public void setOrderNo(String orderNo) { this.orderNo = orderNo; } public String getInternalCode() { return internalCode; } public void setInternalCode(String internalCode) { this.internalCode = internalCode; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } }

6.Spring Boot中全局配置

@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { GsonHttpMessageConverter gsonConverter = new GsonHttpMessageConverter(); gsonConverter.setGson(new GsonBuilder() .setDateFormat("yyyy-MM-dd HH:mm:ss") .create()); converters.add(gsonConverter); } }

7.处理特殊需求

排除某些字段

public class User { private Long id; private String name; @Expose(serialize = false) private String password; // 不序列化密码 // 使用 transient 关键字 private transient String secretKey; // 不参与序列化 // Getter/Setter }

自定义序列化器

public class UserSerializer implements JsonSerializer<User> { @Override public JsonElement serialize(User user, Type type, JsonSerializationContext context) { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("id", user.getId()); jsonObject.addProperty("name", user.getName()); jsonObject.addProperty("age", user.getAge()); // 自定义逻辑 jsonObject.addProperty("description", user.getName() + ",年龄:" + user.getAge()); return jsonObject; } } // 注册使用 Gson gson = new GsonBuilder() .registerTypeAdapter(User.class, new UserSerializer()) .create();

8.前端接收示例

// 假设返回的JSON是: // { // "code": 200, // "message": "success", // "data": { // "id": 1, // "name": "张三", // "age": 25, // "createTime": "2024-01-20 10:30:00" // } // } fetch('/api/user') .then(response => response.json()) .then(data => { console.log(data.code); // 200 console.log(data.message); // "success" console.log(data.data.name); // "张三" });

最佳实践建议:

  1. 统一返回格式:使用统一的Result类封装返回结果

  2. 配置全局Gson:在Spring Boot中配置全局Gson实例

  3. 安全性考虑:敏感字段(密码、token等)不要序列化

  4. 性能优化:重用Gson实例,避免频繁创建

  5. 日期格式化:统一日期格式,避免前端解析问题

  6. 使用注解:合理使用@SerializedName、@Expose等注解

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 0:50:35

5分钟掌握AMD Ryzen处理器精准调优:SMU调试工具完全指南

5分钟掌握AMD Ryzen处理器精准调优&#xff1a;SMU调试工具完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…

作者头像 李华
网站建设 2026/1/29 4:13:41

如何快速掌握PvZ Toolkit:游戏修改的终极指南

如何快速掌握PvZ Toolkit&#xff1a;游戏修改的终极指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中的资源不足而烦恼吗&#xff1f;PvZ Toolkit作为植物大战僵尸PC版的终…

作者头像 李华
网站建设 2026/1/28 17:42:11

IPX协议重生记:让经典游戏在Windows 10/11重获网络对战能力

IPX协议重生记&#xff1a;让经典游戏在Windows 10/11重获网络对战能力 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还记得那些年与朋友在局域网里激烈对战的《红色警戒2》、《魔兽争霸II》吗&#xff1f;这些承载着青春记忆…

作者头像 李华
网站建设 2026/1/27 16:51:05

CentOS 7.9创建用户深度解析:底层原理、工程化实践与10大核心场景实例(SRE/DevOps扩容版)

文章目录 CentOS 7.9创建用户深度解析:底层原理、工程化实践与10大核心场景实例(SRE/DevOps扩容版) 前言 一、CentOS 7.9创建用户的底层深度拆解(扩容版) 1. UID/GID分配:基础规则与特殊场景 2. 核心身份文件:字段解析与安全机制 3. 家目录与环境初始化:细化配置与特殊…

作者头像 李华
网站建设 2026/2/3 6:26:24

Linux用户管理:从单机到全球规模的深度探索

文章目录 《Linux用户管理:从单机到全球规模的深度探索》 以CentOS 7.9为例,SRE/DevOps视角的全景式指南(五倍增强版) 第一部分:Linux用户创建的核心机制深度剖析 第1章:用户创建命令的多维度解析 1.1 useradd命令的100+参数深度解析 1.2 系统配置文件的深度交互机制 第2…

作者头像 李华
网站建设 2026/2/3 4:43:21

Android手机变身USB输入设备:USB HID Client实战指南

Android手机变身USB输入设备&#xff1a;USB HID Client实战指南 【免费下载链接】android-hid-client Android app that allows you to use your phone as a keyboard and mouse WITHOUT any software on the other end (Requires root) 项目地址: https://gitcode.com/gh_m…

作者头像 李华