2016-03-18 5 views
-1

herausfiltern Ich benutze Spring Boot, um Rest API zu implementieren. Es gibt drei Entitäten SeqTb, PairTb und GroupTb und sie sind verschachtelt. SeqTb hat viele mit PairTb. PairTb hat onetomany Beziehung mit SeqTb und auch viele mit GroupTb.wie man Entitätsobjekt in Entität in Ruhe api

//SeqTb.java 
@Entity 
@Table(name="SEQ_TB") 
public class SeqTb implements Serializable { 
....... 
    @ManyToOne 
    @JoinColumn(name="PAIR_ID") 
    private PairTb pairTb; 
...... 
} 

// PairTb.java 
@Entity 
@Table(name="PAIR_TB") 
@NamedQuery(name="PairTb.findAll", query="SELECT p FROM PairTb p") 
public class PairTb implements Serializable { 
    @ManyToOne 
    @JoinColumn(name="GROUP_ID") 
    private GroupTb groupTb; 

    @OneToMany(mappedBy="pairTb", cascade=CascadeType.ALL) 
    private List<SeqTb> seqTbs; 
} 

//GroupId.java 
@Entity 
@Table(name="GROUP_TB") 
public class GroupTb implements Serializable { 
    //bi-directional many-to-one association to PairTb 
    @OneToMany(mappedBy="groupTb", cascade=CascadeType.ALL) 
    private List<PairTb> pairTbs; 
} 

In meinem Controller mit analysisId GET-Anfrage wurde auf folgende Weise behandelt:

@RequestMapping( 
     value = "/api/seqs/{analysis_id}", 
     method = RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<SeqTb> getSeqByAnalysisId(@PathVariable("analysis_id") String analysis_id) { 
    SeqTb seq = seqService.findByAnalysisId(analysis_id); 
    return new ResponseEntity(seq, HttpStatus.OK); 
} 

Ich schaffe auch eine Bean-Klasse SeqServiceBean, die die Schnittstelle SeqService die wiederum ruft Methoden aus der folgenden JPA-Repository erweitert für die Abfrage.

//SeqRepository.java 
@Repository 
public interface SeqRepository extends JpaRepository<SeqTb, Integer> { 
    @Override 
    public List<SeqTb> findAll(); 
    public List<SeqTb> findByAnalysisId(String analysisId); 
} 

Wenn ich ein SeqTb Objekt mit SeqTb.PairTb Abfrage == null, arbeitet die api gut. Wenn die AnalyseId, die ich in die URL einfüge, zu einem SeqTb Datensatz gehört, der mit einer pairId verknüpft ist, die wiederum zu einer groupId gehört, würde das Programm verrückt werden. Unten ist die Ausgabe, die Ausgabe des ersten Teils ist korrekt (fett gedruckter Text). Danach druckt es weiterhin PairTb und GroupTb in Schleifen (wiederholte Schlüsselwörter pairTb, groupTb).

{ "rowid": 8 "analysisId": "cce8d2c2-a6dc-4ee9-ba97-768f058abb50", "analyteCode": "D", "Mitte": "UCSC", "pairTb": { "rowid": 4, "pairCode": "01ad975d-c2ed-4e4d-bd3b-c9512fc9073c", "groupTb": { "rowid": 1 "Gruppenname": "PAWG_pilot-50", " pairTbs ": [{" rowId ": 1," pairCode ":" 00ad0ffe-2105-4829-a495-1c2aceb5bb31 ", " groupTb ": {" rowId ": 1," groupName ":" PAWG_pilot-50 " , "pairTbs":

Inzwischen ich haben viele Fehler von Tomcatbediener:

Caused by: java.lang.IllegalStateException: getOutputStream() has already been called for this response 
    at org.apache.catalina.connector.Response.getWriter(Response.java:565) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:212) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 

Wie kann ich die verschachtelte Einheit Objekt innerhalb eines Unternehmens zu ignorieren und nur die Bedeutung Spalten bekommen?

Antwort

1

Sie können eine Eigenschaft mit @JsonIgnore, um keine Ausgabe mit Anmerkungen versehen, dass Feld.

0

Die Lösung gefunden. Erstellt ein Wertobjekt, das nur die spezifischen Spalten der Entität enthält und das verschachtelte Entitätsobjekt auslässt. Und es funktioniert.