У меня есть форму, которая должна возвращать список клиентов.
Эта форма должна вести себя по-разному в двух случая:
Игнорировать отсутствующее свойство при отображении ответа json
- Пользователь запускает исследование, используя только «фамилию»
- Пользователь запускает исследование с использованием фамилии и имени
В первом case json response имеет меньше полей, чем ответ во втором случае, поэтому я должен игнорировать все эти поля.
Я попытался с помощью @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 + "]";
}}
Любая идея?
EDIT: это пример структуры ответа JSON в случае 1
{
"TIPO_PERSONA" : "G",
"PRO_CLIE" : "123456789",
"CODICE_FISCALE" : "123456789",
"PARTITA_IVA" : "123456789",
"SESSO" : "S",
"COGNOME" : "CUSTOMER SRL"
}
И это пример ответа JSON в случае 2:
{
"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)' – Lucas
эти аннотации дают мне ту же ошибку: «Include/JsonSerialize не может быть разрешен переменной» –