簡體   English   中英

使用自定義視圖解析器和自定義視圖的Spring MVC AJAX和JSON

[英]Spring MVC AJAX and JSON using Custom View Resolver, and 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

好吧,終於嘗試了一百萬種組合

@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”,並拋出了一個異常,該異常使用戶獲得了太多的信息關於我的應用程序,因此基本上我需要找出一種方法,使其僅在某些受保護的控制器上具有此功能...

有任何想法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM