我在后端有这两个类:
产品
public class Produto implements Serializable {
@Transient
@JsonSerialize
@JsonDeserialize
private Set<Filial> filials = new HashSet<>();
//more fields
//getters and setters
孝
public class Filial implements Serializable {
@Id
private Long id;
@Column(name = "nm_filial")
private String nmFilial;
//more fields
//getters and setters
filiais属性不是数据库字段,而是通过以下方式接收其值:
@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":[[1,"A"],[2,"AS"]]}
我如何返回这样的对象数组:
{"id":1, "filials":[{"id":1, "nmFilial":"A"},{"id":2, "nmFilial":"AS"}]}
?
最佳答案
这里使用以下配置:
在我的实体中:
@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;
}
}
在存储库上:
@Query(value = "SELECT pf.filial FROM ProdutoFilial pf "
+ "where pf.produto.id = :idProduto")
ArrayList<Filial> findFiliaisByIdProduto(@Param("idProduto") Long idProduto);
在我的服务范围内(仅供测试)
produto.getFiliais().add(new Filial(1l, "a"));
produto.getFiliais().add(new Filial(2l, "b"));
和工作:
...
"filiais": [
{
"id": 1,
"nmFilial": "a"
},
{
"id": 2,
"nmFilial": "b"
}
]
}