【发布时间】:2016-10-12 11:06:35
【问题描述】:
我需要从我的模型中公开两组不同的值,所以我实现了 2 个视图
public class Views {
public static class Small{ }
public static class Large extends Small { }
}
然后,在我的模型中(所有其他字段都用 JSONIgnore 注释
@JsonView(Views.Small.class)
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id_posto", unique = true, nullable = false)
public int getIdPosto() {
return this.idPosto;
}
public void setIdPosto(int idPosto) {
this.idPosto = idPosto;
}
@JsonView(Views.Large.class)
@NotNull
@Column(name = "nome_posto_park")
public String getNomePosto() {
return this.nomePosto;
}
public void setNomePosto(String nomePosto) {
this.nomePosto = nomePosto;
}
在我的控制器上,我有 2 种方法:
@RequestMapping(value = "/spots", method = RequestMethod.GET)
public ResponseEntity<Posto> getSpotStatus(@RequestParam(value = "idPosto") int idPosto,
@RequestParam(value = "occupied") boolean occupied) {
Posto posto = postoService.findByIdPosto(idPosto);
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
mapper.setConfig(mapper.getSerializationConfig()
.withView(Views.Small.class));
mapper.convertValue(posto, JsonNode.class);
return new ResponseEntity<Posto>(posto, HttpStatus.OK);
和
@RequestMapping(value="/spot", method = RequestMethod.GET)
public ResponseEntity<List<Posto>> getSpotList(@RequestParam (value = "idPiano") int idPiano){
Piano piano = pianoService.findById(idPiano);
List<Posto> posti = postoService.showSpotsByFloor(-1, piano);
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
mapper.setConfig(mapper.getSerializationConfig()
.withView(Views.Large.class));
mapper.convertValue(posti, JsonNode.class);
return new ResponseEntity<List<Posto>>(posti, HttpStatus.OK);
}
Che 结果是一样的...(显然第一个是单个 Posto,第二个是 List,但是模型中的所有字段都被序列化了....
使用视图时我做错了什么?
【问题讨论】: