news 2026/5/10 18:12:15

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/5/7 17:49:25

WarcraftHelper:让经典魔兽在现代电脑焕发新生的终极优化方案

WarcraftHelper&#xff1a;让经典魔兽在现代电脑焕发新生的终极优化方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代系统…

作者头像 李华
网站建设 2026/5/6 5:51:18

AI元人文:一种基于认知-决断-行动链修复的元治理框架

AI元人文&#xff1a;一种基于认知-决断-行动链修复的元治理框架摘要人工智能治理正面临一种深层的“策略性能动性悬置”困境&#xff1a;多元行动者在认知层面承认系统性风险&#xff0c;却在集体行动层面系统性地回避涉及根本性价值冲突的优先次序决断。本文提出“AI元人文”…

作者头像 李华
网站建设 2026/5/6 7:10:15

3步打造专属Plex直播中心:IPTV插件完整配置指南

3步打造专属Plex直播中心&#xff1a;IPTV插件完整配置指南 【免费下载链接】IPTV.bundle Plex plug-in that plays live streams (like IPTV) from a M3U playlist 项目地址: https://gitcode.com/gh_mirrors/ip/IPTV.bundle 还在为无法在Plex中观看直播节目而烦恼吗&a…

作者头像 李华
网站建设 2026/5/1 7:00:30

抖音内容高效下载攻略:告别水印困扰,轻松备份原创作品

抖音内容高效下载攻略&#xff1a;告别水印困扰&#xff0c;轻松备份原创作品 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为抖音视频的水印烦恼吗&#xff1f;想要批量下载学习素材却无从下手&#…

作者头像 李华