Spring Boot+Jersey+Swagger场景下API响应JSON属性自定义问题
解决Spring Boot + Jersey + Swagger的JSON属性名映射问题
不用额外写字典映射服务!你遇到的问题核心在于:@ApiModelProperty只负责Swagger文档的模型展示,完全不影响JSON的序列化/反序列化逻辑——这个工作是由Jersey默认集成的Jackson来处理的。
直接用Jackson的@JsonProperty注解就能同时搞定GET响应的序列化和PUT请求的反序列化,步骤如下:
1. 在实体类字段上添加@JsonProperty
这个注解会告诉Jackson:序列化时把Java字段myText映射为JSON键"My Own Text";反序列化时把JSON键"My Own Text"映射回Java字段myText。同时配合@ApiModelProperty保持Swagger文档的一致性:
import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModelProperty; public class MyEntity { // 同时控制JSON映射和Swagger文档展示 @JsonProperty("My Own Text") @ApiModelProperty(name = "My Own Text", value = "操作结果描述") private String myText; // 标准的getter/setter public String getMyText() { return myText; } public void setMyText(String myText) { this.myText = myText; } }
2. 验证效果
- GET接口:返回
MyEntity实例时,JSON响应会自动变成{"My Own Text": "success"} - PUT接口:前端传入
{"My Own Text": "new content"}时,Jersey会通过Jackson自动将值映射到实体类的myText字段
为什么不需要自定义映射服务?
Jackson是Jersey默认的JSON处理组件,@JsonProperty是它的标准注解,已经原生支持双向的属性名映射,比自己写字典映射更稳定、更简洁,还能避免重复造轮子。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

