使用自定义视图解析器和自定义视图的Spring MVC AJAX和JSON

自定义视图:

public class MyView extends AbstractView {

.... awesome stuff ...

}

控制器:

@RequestMapping(value="mylocation")

public ModelAndView dosomething() {

...

modelAndView.setView( new MyView() );

return modelAndView;

}

由于某些原因,这不起作用…我仅有的视图解析器如下:

<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视图:我不确定表单提交的路径;而且显然没有JSP视图,我期望实际上会返回JSON,但是由于某种原因,这是行不通的,它只是试图将我转发到某些JSP,所以我猜我需要指定如何在我的XML中处理此问题…但是我已经看到人们返回JSON的大约1000种不同方式,所有这些方式都让我感到困惑,我只是在寻找最简单的方式,因此我可以从那里

编辑:我添加了一个答案,这是一个很好的开始,但是它允许您在任何URL后键入“

.json”,如果作为控制器,我不希望它会做一些非常不好的事情,所以我需要某种方式此视图解析器仅适用于受保护的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”,并抛出了一个异常,该异常使用户获得了太多的信息关于我的应用程序,因此基本上我需要找出一种方法,使其仅在某些受保护的控制器上具有此功能…

有任何想法吗?

以上是 使用自定义视图解析器和自定义视图的Spring MVC AJAX和JSON 的全部内容, 来源链接: utcz.com/qa/399756.html

回到顶部