Can I ignore just a setter w/ Jackson & Spring?
我有一个情况,我把一个对象从Java传递到JavaScript客户端,它在3中被内置的Jackson映射器序列化(使用@请求体/@响应体和应用程序/JSON内容类型)
我遇到的问题是,一些类从一个有getter但没有setter的接口实现。
我确实希望客户机端的getter值可用,所以我不能使用@jsonignore注释,因为这样它就完全忽略了属性,包括序列化和反序列化。序列化时需要该属性。
还有别的办法吗?
可能有一种更简单的方法,但我想提到使用JSON视图作为可能的解决方案。这条线上有一个例子。
您可能需要一个不同的反序列化视图,而不仅仅是序列化视图,这是一个由Spring3.2支持并返回到Spring3.1的Jackson2.0特性。自Jackson 1.4以来,仅在序列化上使用视图是一项功能。
另一个需要考虑的选项是使用自定义反序列化程序。
我在找同样的东西。
根据Jackson文档,我们可以在一个属性、getter或setter上设置一个
例如,用例是自动生成的ID。我不想让用户设置,甚至看不到,但他可以阅读。
您可以通过实际上隐藏属性本身,然后添加
举个例子(如果太详细的话,我很抱歉):
用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class User { private String uid; private String customerId; private String taxSsnId; public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getCustomerId() { return extCustomerId; } public void setCustomerId(String extCustomerId) { this.extCustomerId = extCustomerId; } public String getTaxSsnId() { return taxSsnId; } public void setTaxSsnId(String taxSsnId) { this.taxSsnId = taxSsnId; } @JsonIgnore public void getId(){ if (getUid() != null){ return getUid(); } if (getCustomerId() != null ){ return getCustomerId(); } return null; } } |
设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | public class Setting { @JsonIgnore private int id; private String key; private String value; @JsonIgnore private User lastUpdatedBy; @JsonIgnore private Date lastUpdatedAt; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public User getLastUpdatedBy() { return lastUpdatedBy; } public void setLastUpdatedBy(User lastUpdatedBy) { this.lastUpdatedBy = lastUpdatedBy; } public Date getLastUpdatedAt() { return lastUpdatedAt; } public void setLastUpdatedAt(Date lastUpdatedAt) { this.lastUpdatedAt = lastUpdatedAt; } @JsonAnyGetter private Map<String, String> other() { Map<String, String> map = new LinkedHashMap<String, String>(); map.put("id", this.getId()); map.put("lastUpdatedBy", this.getLastUpdatedBy().getId()); SimpleDateFormat format = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z"); map.put("lastUpdatedAt", format.format(this.getLastUpdatedAt()) ); return map; } } |
号
生成此
1 2 3 4 | { "key":"string", "value":"string" } |
这个
1 2 3 4 5 6 7 | { "key":"string", "value":"string", "id":"12345", "lastUpdatedBy":"String", "lastUpdatedAt":"String" } |
。