Ignore absent property when mapping json response
我有一个表格应该返回客户列表。
在两种情况下,此表单的行为应该不同:
在第一种情况下,json响应的字段少于第二种情况下的响应,因此我必须忽略所有这些字段。
我尝试过使用
1 | 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:
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 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 +"]"; }} |
任何的想法?
编辑:这是案例1中的json响应结构的示例
1 2 3 4 5 6 7 8 | { "TIPO_PERSONA" :"G", "PRO_CLIE" :"123456789", "CODICE_FISCALE" :"123456789", "PARTITA_IVA" :"123456789", "SESSO" :"S", "COGNOME" :"CUSTOMER SRL" } |
这是案例2中json响应的一个示例:
1 2 3 4 5 6 7 8 9 | { "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处于完全恐慌模式...
您需要配置对象映射器以使空bean失败。
下面是一个示例代码,因为您没有自己创建
1 2 3 | private ObjectMapper jacksonMapper = new ObjectMapper(); jacksonMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); jacksonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); |
您还可以使用:
1 | jacksonMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES,false); |