Spring MVC AJAX и JSON, используя пользовательский View Resolver и пользовательский вид
-
30-09-2019 - |
Вопрос
Пользовательские представления:
public class MyView extends AbstractView {
.... awesome stuff ...
}
Контроллер:
@RequestMapping(value="mylocation")
public ModelAndView dosomething() {
...
modelAndView.setView( new MyView() );
return modelAndView;
}
По какой-то причине это не работает ... единственным представлением Resolver у меня есть следующее:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
<property name="exposedContextBeanNames">
<list>
<value>spEnv</value>
</list>
</property>
</bean>
Этот код не работает, потому что он пытается создать какой-то вид JSP, основанный на ... Я не уверен, путь подачи формы; И там, очевидно, нет, я ожидаю, что JSON возвращается на самом деле, но по какой-то причине это не работает, просто пытается переслать меня в некоторую JSP, поэтому я предполагаю, что мне нужно указать Как справиться с этим в моем XML ... но я видел около 1000 разных способов, которым люди возвращают JSON, и все они очень путают мне, я просто ищу самый простой способ, чтобы я мог взять это из там
Редактировать: я добавил ответ, который является хорошим началом, но это позволяет ввести «.json» после любого URL, и это сделает некоторые действительно плохие вещи, если как контроллер, я не ожидаю этого, поэтому мне нужно как-то иметь Эта просмотр резолюстры только применится к защищенным URL-адресам
Решение
Хорошо, наконец, после пробования миллиона комбинаций
@RequestMapping(value = "/test/data")
public TestFormData dostuff() {
TestFormData data = new TestFormData();
data.setName("myname");
return data;
}
А потом это
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
Я не очень понимаю, как я могу вернуть объект отсюда ...
Но это на самом деле, в то время как просто, и очень полезно не приемлемо, потому что тогда я пошел на какую-то другую страницу моего сайта, и просто поставить произвольную ".json" после URL, и он бросил исключение, что дает пользователям слишком много информации О моем приложении, поэтому в основном мне нужно понять способ только иметь эту способность на определенных контроллерах, которые защищены ...
Есть идеи?