【发布时间】:2016-08-23 10:32:02
【问题描述】:
我有一个应该返回客户列表的表单。
此表单在两种情况下的行为应有所不同:
- 用户仅使用“姓氏”开始研究
- 用户使用姓和名开始研究
在第一种情况下,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 客户:
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 响应结构的示例
{
"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 进入完全恐慌模式...
【问题讨论】:
-
能否请您也发布一个您尝试解析的数据示例?
-
尝试将注释更改为:
@JsonInclude(Include.NON_NULL)或@JsonInclude(JsonSerialize.Inclusion.NON_NULL) -
这些注解给了我同样的错误:“Include/JsonSerialize cannot be resolve to a variable”
标签: java json spring jackson pojo