[英]Excluding null fields in pojo response
我想從pojo中排除空字段
**** TransactionHistoryBO Pojo **
package main.java.com.as.model; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) public class TransactionHistoryBO { private String processId; private String dateTime; private Integer status; private Double pointsEarned; private String productName; private String receiptNumber; public String getProcessId() { return processId; } public void setProcessId(String processId) { this.processId = processId; } public String getDateTime() { return dateTime; } public void setDateTime(String dateTime) { this.dateTime = dateTime; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Double getPointsEarned() { return pointsEarned; } public void setPointsEarned(Double pointsEarned) { this.pointsEarned = pointsEarned; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getReceiptNumber() { return receiptNumber; } public void setReceiptNumber(String receiptNumber) { this.receiptNumber = receiptNumber; } }
**
交易紀錄回應pojo
public class TransactionHistoryResponse { private ArrayList<TransactionHistoryBO> transactions; @JsonInclude(JsonInclude.Include.NON_NULL) public ArrayList<TransactionHistoryBO> getTransactions() { return transactions; } @JsonInclude(Include.NON_NULL) public void setTransactions(ArrayList<TransactionHistoryBO> transactions) { this.transactions = transactions; } }
交易歷史記錄響應pojo中使用了交易歷史記錄BO類型的數組列表。這是我在響應中顯示的確切pojo。我想在交易歷史記錄BO中排除具有空值的字段。 我嘗試使用@JsonInclude(JsonInclude.Include.NON_NULL)。它不起作用。也嘗試使用JsonSerialize,但已棄用。使用的傑克遜版本為2.2.2。
任何幫助,將不勝感激..請幫助..
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TransactionHistoryBO { ... }
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TransactionHistoryResponse { ... }
public class App {
public static void main(String... args) throws JsonProcessingException {
ObjectMapper om = new ObjectMapper();
TransactionHistoryResponse thr = new TransactionHistoryResponse();
TransactionHistoryBO thbo = new TransactionHistoryBO();
thbo.setProductName("TEST");
thr.setTransactions(new ArrayList<TransactionHistoryBO>());
thr.getTransactions().add(thbo);
System.out.print(om.writerWithDefaultPrettyPrinter().writeValueAsString(thr));
}
}
產生輸出:
{
"transactions" : [ {
"productName" : "TEST"
} ]
}
不使用其他注釋。 只需將@JsonInclude注釋添加到類而不是屬性。
更新:
將自定義JacksonJsonProvider添加到您的應用程序
@Provider
public class CustomJsonProvider extends ResteasyJackson2Provider {
@Override
public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException {
ObjectMapper mapper = locateMapper(type, mediaType);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
super.writeTo(value, type, genericType, annotations, mediaType, httpHeaders, entityStream);
}
}
在您的web.xml中注冊此提供程序
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>com.package.CustomJsonProvider</param-value>
</context-param>
經過和不經過測試,都可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.