news 2026/5/19 5:05:47

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/19 15:18:46

.gitlab-ci.yml这个文件有什么作用

gitlab-ci.yml文件是 GitLab CI/CD 的核心配置文件&#xff0c;定义了项目的自动化构建、测试和部署流程。删除它会直接影响项目的持续集成/持续交付功能。&#x1f4c1; 主要作用自动化流水线​ - 代码推送时自动运行测试、构建、部署质量检查​ - 自动执行代码检查、安全扫描…

作者头像 李华
网站建设 2026/5/16 14:23:47

Obsidian PDF导出终极指南:从零掌握专业分页技巧

Obsidian PDF导出终极指南&#xff1a;从零掌握专业分页技巧 【免费下载链接】obsidian-better-export-pdf Obsidian PDF export enhancement plugin 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-better-export-pdf 还在为Obsidian笔记导出PDF时的排版混乱而…

作者头像 李华