2015-11-20 1 views
0

Я хочу, чтобы исключить нулевые поля из POJOисключая нулевые поля в ответ Pojo

**** TransactionHistoryBO Pojo **

package main.java.com.as.model; 
 

 
import com.fasterxml.jackson.annotation.JsonInclude; 
 

 
@JsonInclude(JsonInclude.Include.NON_NULL) 
 
public class TransactionHistoryBO 
 
{ 
 
\t private String processId; 
 
\t private String dateTime; 
 
\t private Integer status; 
 
\t private Double pointsEarned; 
 
\t private String productName; 
 
\t private String receiptNumber; 
 
\t 
 
\t public String getProcessId() { 
 
\t \t return processId; 
 
\t } 
 
\t public void setProcessId(String processId) { 
 
\t \t this.processId = processId; 
 
\t } 
 

 

 
\t public String getDateTime() { 
 
\t \t return dateTime; 
 
\t } 
 
\t public void setDateTime(String dateTime) { 
 
\t \t this.dateTime = dateTime; 
 
\t } 
 
\t public Integer getStatus() { 
 
\t \t return status; 
 
\t } 
 
\t public void setStatus(Integer status) { 
 
\t \t this.status = status; 
 
\t } 
 
\t 
 
\t public Double getPointsEarned() { 
 
\t \t return pointsEarned; 
 
\t } 
 

 
\t public void setPointsEarned(Double pointsEarned) { 
 
\t \t this.pointsEarned = pointsEarned; 
 
\t } 
 

 
\t public String getProductName() { 
 
\t \t return productName; 
 
\t } 
 
\t 
 
\t public void setProductName(String productName) { 
 
\t \t this.productName = productName; 
 
\t } 
 
\t 
 
\t public String getReceiptNumber() { 
 
\t \t return receiptNumber; 
 
\t } 
 
\t public void setReceiptNumber(String receiptNumber) { 
 
\t \t this.receiptNumber = receiptNumber; 
 
\t } 
 

 

 

 
}

**

История транзакций Ответ pojo

public class TransactionHistoryResponse 
 
{ 
 
\t private ArrayList<TransactionHistoryBO> transactions; 
 
\t 
 
\t @JsonInclude(JsonInclude.Include.NON_NULL) 
 
\t public ArrayList<TransactionHistoryBO> getTransactions() { 
 
\t \t return transactions; 
 
\t } 
 
\t @JsonInclude(Include.NON_NULL) 
 
\t public void setTransactions(ArrayList<TransactionHistoryBO> transactions) { 
 
\t \t this.transactions = transactions; 
 
\t } 
 

 
\t 
 
\t }

список Массива типа Transaction History BO используется в Transaction History Response pojo.This является точным POJO, что я показываю в response.I хотел бы исключить поля с нулевыми значениями в истории транзакций BO. Я пробовал с @JsonInclude (JsonInclude.Include.NON_NULL). Он не работает. Также пытался с JsonSerialize, но он устарел. Используемая версия Jackson - 2.2.2.

Любой помощь будет appreciated..please помощи ..

ответ

1
@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 к классам, а не к свойствам.


UPDATE:

Добавление пользовательского 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> 

Испытано и без этого и оно работает.

+0

, Спасибо за вашу помощь. В моем первоначальном посте я объявил json включить аннотацию на уровне класса в TransactionHistoryBO. Это не работает. Там все равно, где я могу использовать концепцию Mapper объекта, как вы написали? FYI: Я использую rest easy.It автоматически преобразует pojo в json. – Jill

+0

Вы добавили аннотацию jsoninclude к классу TransactionHistoryResponse, как в моем примере? – Ghokun

+0

yes..Its не работает. – Jill