Sono consapevole che è possibile annotare i metodi del controller con @JsonView(...)
per definire staticamente una singola classe di visualizzazione in Spring MVC. Sfortunatamente ciò significa che ho bisogno di un endpoint diverso per ogni tipo di vista che potrei avere.Selezione dinamica di JsonView in Spring Controller MVC
Vedo altre persone hanno chiesto questo before. Mentre questo approccio può funzionare, Spring ha spesso molti modi di fare la stessa cosa. A volte la soluzione può essere molto più semplice di quanto non appaia se hai solo un po 'di conoscenza di alcuni interni.
Mi piacerebbe avere un singolo endpoint del controller che possa selezionare dinamicamente la vista appropriata in base al principale corrente. Posso restituire un Model
con un attributo che contiene la classe di visualizzazione appropriata o forse un'istanza MappingJacksonValue
direttamente?
vedo in org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter#writeInternal
c'è un frammento di codice che determina ciò che vista da usare:
if (value instanceof MappingJacksonValue) {
MappingJacksonValue container = (MappingJacksonValue) object;
value = container.getValue();
serializationView = container.getSerializationView();
}
che sembra venire da org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyAdvice#beforeBodyWriteInternal
ma sto avendo problemi di lavoro se c'è un modo ho potuto bypass questo semplicemente semplicemente restituendo un valore particolare che contiene le informazioni necessarie allo Jackson2HttpMessageConverter
per selezionare la vista corretta.
Qualsiasi aiuto molto apprezzato.
È inoltre possibile configurare un ContentNegotiatingViewResolver – Richard