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

时间:2010-06-25 20:34:01

标签: java json spring-mvc custom-view

自定义视图:

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

1 个答案:

答案 0 :(得分:1)

好的,最后尝试了一百万次组合

@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”,它抛出一个异常,给用户提供方式关于我的应用程序的信息太多了,所以基本上我需要想办法在某些受保护的控制器上只具备这种能力......

任何想法?