2016-09-22 9 views
0

私はバックエンドで、この2つのクラスをしました:ArrayListの<Object> JSON

public class Filial implements Serializable { 

@Id 
private Long id; 

@Column(name = "nm_filial") 
private String nmFilial; 

//more fields 
//getters and setters 

filiaisプロパティ

public class Produto implements Serializable { 

    @Transient 
    @JsonSerialize 
    @JsonDeserialize 
    private Set<Filial> filials = new HashSet<>(); 

//more fields 
//getters and setters 

親孝行

Produtoは、データベースのフィールドではありませんこの方法で値を受け取ります:

@RequestMapping(value = "/produtos/{id}", 
    method = RequestMethod.GET, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
public ResponseEntity<Produto> getProduto(@PathVariable Long id) { 

    Produto produto = produtoService.findOne(id); 

    Set<Filial> filials = produtoFilialService.findFiliaisByIdProduto(produto.getId());  
    produto.setFilials(filials); 

    return Optional.ofNullable(produto) 
     .map(result -> new ResponseEntity<>(
      result, 
      HttpStatus.OK)) 
     .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); 
} 

しかし、JSONが返されたフロントエンドのコールこのクラスは、このようなものですとき:

{"id":1, "filials":[{"id":1, "nmFilial":"A"},{"id":2, "nmFilial":"AS"}]} 

{"id":1, "filials":[[1,"A"],[2,"AS"]]} 

どのように私はこのようなオブジェクトの配列を返すことができますか?

+0

どのようにJSONを生成しているが、どのライブラリを使用してJSONを生成していますか?オブジェクトをJSONに変換するコードを表示します。 – Jesper

+0

@Jesper私は春のフレームワークを使用して、私は上記の質問を編集: – Jack

+0

いくつかの点。 1-ここではわかりませんが、 '@ Transient'キーワードを削除してください。 2-アノテーション '@ Id'と' @Column'の両方を削除します。彼らは関係ないので – eladyanai

答えて

1
ここ

フォロー構成で動作します。私のエンティティで

@Transient 
    @JsonSerialize 
    @JsonDeserialize 
    private List<Filial> filiais = new ArrayList<>(); 

親孝行クラス:

import java.io.Serializable; 


public class Filial implements Serializable{ 

    private Long id; 

    private String nmFilial; 

    public Filial(){} 

    public Filial(Long id, String nmFilial){ 
     this.id = id; 
     this.nmFilial = nmFilial; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getNmFilial() { 
     return nmFilial; 
    } 

    public void setNmFilial(String nmFilial) { 
     this.nmFilial = nmFilial; 
    } 
} 
私は(単なるテストに)

produto.getFiliais().add(new Filial(1l, "a")); 
produto.getFiliais().add(new Filial(2l, "b")); 

と仕事やる私のサービスで

@Query(value = "SELECT pf.filial FROM ProdutoFilial pf " 
     + "where pf.produto.id = :idProduto") 
ArrayList<Filial> findFiliaisByIdProduto(@Param("idProduto") Long idProduto); 

:リポジトリに

... 
    "filiais": [ 
    { 
     "id": 1, 
     "nmFilial": "a" 
    }, 
    { 
     "id": 2, 
     "nmFilial": "b" 
    } 
    ] 
} 
+0

それはそれだ!!!!!それは私のためにうまくいく。ありがとう@レビ – Jack

0

使用ArrayList代わりHashSetの:

public class Produto implements Serializable { 

    @Transient 
    @JsonSerialize 
    @JsonDeserialize 
    private List<Filial> filials = new ArrayList<>(); 
+0

私は変更されましたが、動作しません。 : '( – Jack

関連する問題