2016-10-12 3 views
1

мне нужно выставить два разных набора значений из моей модели, поэтому я реализован 2 просмотровSpring MVC + Jackson - JsonView

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 и второй список, но все поля из модели сериализовать ....

Что я делаю неправильно при использовании просмотров?

ответ

0

Вам нужно определить, производит и потребляет с согласен вид и аннотацию с @ResponseBody

Пример: Измените необходимый

@Produces(value = { MediaType.APPLICATION_JSON_VALUE }) 
@Consumes(value = { MediaType.APPLICATION_JSON_VALUE }) 
public @ResponseBody public ResponseEntity<List<Posto>> getSpotList(... 

//when request, put your client agree request view 
protected HttpEntity<T> headers() 
{ 
    final HttpHeaders headers = new HttpHeaders(); 
    headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); 
    headers.set("application", MediaType.APPLICATION_JSON_VALUE); 
    // T define your type here 
    return new HttpEntity<T>(headers); 
} 
Смежные вопросы