Jestem świadomy, że możliwe jest przypisywanie metod kontrolera za pomocą @JsonView(...)
w celu statycznego zdefiniowania pojedynczej klasy widoku w Spring MVC. Niestety oznacza to, że potrzebuję innego punktu końcowego dla każdego rodzaju widoku, jaki mógłbym mieć.Dynamiczny wybór JsonView na wiosnę Kontroler MVC
Widzę, że inni ludzie pytali o to before. Chociaż takie podejście może działać, Spring często ma wiele sposobów robienia tego samego. Czasami rozwiązanie może być o wiele prostsze, niż po raz pierwszy pojawia się, jeśli masz trochę wiedzy na temat niektórych wewnętrznych elementów.
Chciałbym mieć punkt kontrolny z pojedynczym kontrolerem, który może dynamicznie wybierać odpowiedni widok na podstawie bieżącej wartości głównej. Czy mogę zwrócić Model
za pomocą atrybutu zawierającego odpowiednią klasę widoku lub instancję MappingJacksonValue
bezpośrednio?
widzę w org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter#writeInternal
jest to fragment kodu, który określa, co zobaczyć w użyciu:
if (value instanceof MappingJacksonValue) {
MappingJacksonValue container = (MappingJacksonValue) object;
value = container.getValue();
serializationView = container.getSerializationView();
}
który wydaje się pochodzić z org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyAdvice#beforeBodyWriteInternal
ale mam problemy z pracy, czy istnieje sposób mogłem bypass to po prostu zwracając konkretną wartość, która zawiera informacje niezbędne dla Jackson2HttpMessageConverter
, aby wybrać odpowiedni widok.
Każda pomoc bardzo ceniona.
Można również skonfigurować ContentNegotiatingViewResolver – Richard