2016-08-23 83 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 –