2016-08-23 72 views
0

我有一個表單,它應該返回客戶列表。
這種形式應該表現不同的兩種情況:
映射json響應時忽略缺失的屬性

  1. 用戶只使用「姓」
  2. 用戶使用姓氏和名字

在第一個開始研究啓動研究如果json響應的字段少於第二種情況下的響應,那麼我必須忽略所有這些字段。
我使用@JsonInclude(JsonInclude.Include.NON_ABSENT)@JsonInclude(JsonInclude.Include.NON_EMPTY)@JsonInclude(JsonInclude.Include.NON_NULL)但每一個人的這些錯誤返回嘗試始終是相同的:

java.lang.Exception: Could not write content: (was java.lang.NullPointerException) (through reference chain: it.gruppoitas.itasacquire.pojo.Cliente["DATA_NASCITA"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: it.gruppoitas.itasacquire.pojo.Cliente["DATA_NASCITA"]) 



這是POJO Cliente:

package it.gruppoitas.itasacquire.pojo; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.databind.annotation.JsonSerialize; 

@JsonInclude(JsonInclude.Include.NON_ABSENT) 
public class Cliente { 

@JsonProperty("TIPO_PERSONA") 
private String tipoPersona; 
@JsonProperty("PRO_CLIE") 
private String proClie; 
@JsonProperty("CODICE_FISCALE") 
private String codiceFiscale; 
@JsonProperty("DATA_NASCITA") 
private String dataNascita; 
@JsonProperty("SESSO") 
private String sesso; 
@JsonProperty("NOME") 
private String nome; 
@JsonProperty("COGNOME") 
private String cognome; 

public String getTipoPersona() { 
    return tipoPersona; 
} 

public void setTipoPersona(String tipoPersona) { 
    this.tipoPersona = tipoPersona; 
} 

public String getProClie() { 
    return proClie; 
} 

public void setProClie(String proClie) { 
    this.proClie = proClie; 
} 

public String getCodiceFiscale() { 
    return codiceFiscale; 
} 

public void setCodiceFiscale(String codiceFiscale) { 
    this.codiceFiscale = codiceFiscale; 
} 

public String getDataNascita() { 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
    Date data = null; 
    try { 
     data = sdf.parse(dataNascita); 
     dataNascita = new SimpleDateFormat("dd/MM/yyyy").format(data); 
    } catch (ParseException e) { 
     System.err.println(e); 
    } 
    return dataNascita; 
} 

public void setDataNascita(String dataNascita) { 
    this.dataNascita = dataNascita; 
} 

public String getSesso() { 
    return sesso; 
} 

public void setSesso(String sesso) { 
    this.sesso = sesso; 
} 

public String getNome() { 
    return nome; 
} 

public void setNome(String nome) { 
    this.nome = nome; 
} 

public String getCognome() { 
    return cognome; 
} 

public void setCognome(String cognome) { 
    this.cognome = cognome; 
} 

@Override 
public String toString() { 
    return "Cliente [tipoPersona=" + tipoPersona + ", proClie=" + proClie + ", codiceFiscale=" + codiceFiscale + ", dataNascita=" 
      + dataNascita + ", sesso=" + sesso + ", nome=" + nome + ", cognome=" + cognome + "]"; 
}} 



任何想法?

編輯:這是JSON響應結構的示例的情況下,1

{ 
    "TIPO_PERSONA" : "G", 
    "PRO_CLIE" : "123456789", 
    "CODICE_FISCALE" : "123456789", 
    "PARTITA_IVA" : "123456789", 
    "SESSO" : "S", 
    "COGNOME" : "CUSTOMER SRL" 
} 


而這在情況2 JSON響應的一個示例:

 { 
     "TIPO_PERSONA" : "F", 
     "PRO_CLIE" : "123456789", 
     "CODICE_FISCALE" : "123456789", 
     "DATA_NASCITA" : "1969-09-07 00:00:00.0", 
     "SESSO" : "F", 
     "NOME" : "Foo", 
     "COGNOME" : "Fie" 
    } 


正如你所看到的情況1有更少的領域和STS進入全恐慌模式...

+0

請問你可以發表一個你想分析的數據的例子嗎? –

+0

嘗試將您的註釋更改爲:'@JsonInclude(Include.NON_NULL)'或'@JsonInclude(JsonSerialize.Inclusion.NON_NULL)' – Lucas

+0

這些註釋給了我同樣的錯誤:「Include/JsonSerialize無法解析爲變量」 –

回答

1

您需要配置對象映射器不要在空的bean上失敗。

這裏是一個示例代碼,因爲你沒有提供ObjectMapper代碼自己的創作:

private ObjectMapper jacksonMapper = new ObjectMapper(); 
jacksonMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 
jacksonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
+0

怎麼樣jacksonMapper.configure(DeSerializationFeature.FAIL_ON_UNKNOWN_PROPERTY,false); – subash

+0

我會補充,謝謝。 –

+0

我沒有創建ObjectMapper –