我正在使用Spring开发新的REST API,我有BaseResponse类,它充当所有响应的基本响应。该类包含属性String requestUuid;,在某些情况下,必须使用属性名称requestUuid序列化requestUuid,在其他情况下,必须将其序列化为request_uuid,我知道我可以使用@JsonProperty作为字段级注解,但它将影响所有响应。是否有任何方法来覆盖属性名称特别是为每一个派生类。
BaseResponse
String requestUuid;
requestUuid
request_uuid
@JsonProperty
2ekbmq321#
你可以在方法层使用@JsonProperty,这样,你就可以在子类中覆盖字段的getter方法并对其进行注解。例如:
class BaseResponse { private String requestUuid; public getRequestUuid() { return requestUuid; } } class OtherResponse extends BaseResponse { @Override @JsonProperty("request_uuid") public getRequestUuid() { return super.getRequestUuid(); } }
2j4z5cfb2#
可以使用不同的键名发送两次字段。
@JsonAnyGetter public Map<String, Object> otherFields() { Map<String, Object> otherFields = new HashMap<>(); otherFields.put("requestUuid", this.requestUuid); otherFields.put("request_uuid", this.requestUuid); return otherFields; }
另外,忽略实际字段:
@JsonIgnore private String requestUuid;
ukxgm1gy3#
扩展@JoshA响应,另一种方法是定义一个构造函数并对其进行注解,这样可以避免重写派生类中的getter方法,从而使代码更加简洁。
class BaseResponse { private String firstName; private String lastName; public BaseResponse(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public getFirstName() { return firstName; } public getLastName() { return lastName; } } class OtherResponse extends BaseResponse { public OtherResponse(@JsonProperty("given_name") String firstName, @JsonProperty("family_name") String lastName) { super(firstName, lastName); } }
8dtrkrch4#
不,这是不可能的,什么是可能的,你可以为不同类型的请求创建新的类。
4条答案
按热度按时间2ekbmq321#
你可以在方法层使用
@JsonProperty
,这样,你就可以在子类中覆盖字段的getter方法并对其进行注解。例如:
2j4z5cfb2#
可以使用不同的键名发送两次字段。
另外,忽略实际字段:
ukxgm1gy3#
扩展@JoshA响应,另一种方法是定义一个构造函数并对其进行注解,这样可以避免重写派生类中的getter方法,从而使代码更加简洁。
8dtrkrch4#
不,这是不可能的,什么是可能的,你可以为不同类型的请求创建新的类。