2016-08-23 6 views
0

У меня есть форму, которая должна возвращать список клиентов.
Эта форма должна вести себя по-разному в двух случая:
Игнорировать отсутствующее свойство при отображении ответа json

  1. Пользователь запускает исследование, используя только «фамилию»
  2. Пользователь запускает исследование с использованием фамилии и имени

В первом 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 переходит в режим полной паники ...

+0

Не могли бы вы также указать пример данных, которые вы пытаетесь проанализировать? –

+0

попробуйте изменить аннотацию на: '@JsonInclude (Include.NON_NULL)' или '@JsonInclude (JsonSerialize.Inclusion.NON_NULL)' – Lucas

+0

эти аннотации дают мне ту же ошибку: «Include/JsonSerialize не может быть разрешен переменной» –

ответ

1

Вам необходимо настроить свой объект mapper, чтобы он не сработал на пустых бобах.

Вот пример кода, так как вы не обеспечивают создание 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 –

Смежные вопросы