2016-08-09 97 views
0

Ich bin neu in der Entwicklung von REST-Webservices. Momentan verwenden wir Spring Boot, Spring JPA für die Entwicklung von Diensten. Ich habe Schwierigkeiten, selektive Spalten in der REST-Antwort zurückzugeben. Mein Problem ist, wie folgt:holen weniger Spalten in REST JSON Antwort

ich eine Benutzertabelle mit 10 Zeilen mit folgenden Spalten

  1. Id
  2. Namen
  3. Alter
  4. Stadt
  5. Mobil
haben

Mein Benutzer Entity Objekt ist:

@Entity 
@Table(name="user") 
public class User 
{ 

@Id 
@GeneratedValue(generator="ID", strategy=GenerationType.SEQUENCE) 
private long id; 

@Column(name="Name") 
private string name; 

@Column(name="age") 
private int age; 

@Column(name="city") 
private string city; 

@Column(name="mobile number") 
private string mobileNumber; 
. 
. 
. 
getter and setters 
. 
. 
.} 

ich unter zwei Anforderungen zu entwickeln:

  1. So setzen Sie alle Zeilen mit allen Spalten
  2. Um alle Zeilen mit nur drei Spalten (ID, Name und Handynummer) zurückzukehren

Für die erste Anforderung, konnte ich es mithilfe der findAll() von JPA

Für die zweite requir zum Laufen zu bringen ement, habe ich versucht, wie unten eine benutzerdefinierte Abfrage verwenden:

@Query("select New com.org.user(u.id, u.name, u.mobileNumber) from user u") 
public List<user> getList() 

Damit war meine Json Antwort, wie unten mit den beiden anderen Bereichen (Stadt und Alter), die Standardwerte suchen, aber nicht die tatsächlichen Werte in der Tabelle.

[ 
{ 
"id": 1, 
"name":"Rocky" 
"age":0, 
"city":null, 
"mobileNumber": "9080980909" 
}, 
{ 
"id": 2, 
"name":"Stella" 
"age":0, 
"city":null, 
"mobileNumber": "8909012239" 
} 
. 
. 
. 
. 
{ 
"id": 10, 
"name":"Una" 
"age":0, 
"city":null, 
"mobileNumber": "78976887989" 
} 
] 

Aber ich brauche die Antwort wie unten zu sein, enthalten nur drei Felder

[ 
{ 
"id": 1, 
"name":"Rocky", 
"mobileNumber": "9080980909" 
}, 
{ 
"id": 2, 
"name":"Stella", 
"mobileNumber": "8909012239" 
}, 
. 
. 
. 
{ 
"id": 10, 
"name":"Una", 
"mobileNumber": "78976887989" 
} 
] 

Kann jemand bitte so helfen, wie kann ich die Antwort, wie oben erhalten?

+0

JSONView: https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring –

+0

Hallo Alan, ist es eine andere Möglichkeit, dies zu tun, anstatt zu schaffen POJOs für jede benutzerdefinierte Antwort, die wir brauchen? – Harish

+0

Ja, verwenden Sie JsonView wie empfohlen oder konfigurieren Sie Ihren Serializer, um Nullen zu ignorieren, z. für Jackson: http://stackoverflow.com/questions/11757487/how-to-tell-jackson-to-ignore-a-field-during-serialization-if-its-value-is-null. Verwenden Sie für Nicht-Nullable-Primitive Boolean, Integer usw. die nullbaren Wrapper-Typen Boolean, Integer usw. in Ihrem Pojo. –

Antwort

0

Verwenden Sie die Anmerkung @JsonInclude (Include.NON_NULL) für Ihre Entität. Es wird alle Nullfelder in Ihrer JSON-Antwort ausschließen. Aber dann müssen Sie "Alter" von Int in Integer-Datentyp für NULL ändern.

@Entity 
@Table(name="user") 
@JsonInclude(Include.NON_NULL) 
public class User 
{ 

@Id 
@GeneratedValue(generator="ID", strategy=GenerationType.SEQUENCE) 
private long id; 

@Column(name="Name") 
private String name; 

@Column(name="age") 
private Integer age; 

@Column(name="city") 
private String city; 

@Column(name="mobile number") 
private String mobileNumber; 
. 
. 
. 
getter and setters 
. 
. 
.} 
+0

Was, wenn ich ein Feld habe, das ein boolescher ist, funktioniert @JsonInclude (Include.NON_NULL)? – Harish

+0

Ändern Sie den Datentyp in Boolean. Verwenden Sie keine primitiven Datentypen, wenn Sie NULL-Werte zulassen möchten. – Leo