2013-12-18 52 views
0

我有一箇舊的數據庫中的POJO和我創造了這個支架吧:使用Grails腳手架時與XML響應

package example 

import com.example.entities.ModelView 

class ModelViewController { 
    static scaffold = ModelView 
} 

當我去我的瀏覽器在http://example.com:8080/example/modelView/list我看到一個精彩的HTML頁面,在這裏我得到完整的CRUD。這很棒!

現在我想要得到XML,所以我訪問了URL http://example.com:8080/example/modelView/list.xml,它仍然返回HTML。

我的最終目標是有澤西代碼,獲取XML在這樣的Java應用程序:上面的代碼

WebTarget targetBase = ClientBuilder.newClient().target("http://example.com:8080/example"); 
targetBase.path("modelView").path("list.xml").request(MediaType.APPLICATION_XML_TYPE).get(new GenericType<List<ModelView>>(){}); 

所以我有,但它從Grails的,而不是它正在請求XML得到HTML。

如何讓Grails發送XML?

+0

的XML什麼。做你想要ModelView' – Deepak

回答

1

你可以這樣做的一種方法是安裝Grails Scaffolding插件(http://grails.org/doc/latest/guide/scaffolding.html),它將允許你覆蓋默認的控制器和視圖模板,這些模板用於生成你所描述的帶有完整CRUD的'精彩的HTML頁面' 。然後,您將能夠在控制器模板的操作中添加澤西島代碼,並且您爲每個生成的腳手架的新頁面都將執行此操作。

一切順利吧。

2

如果你希望所有的ModelView實例的XML

def xmllist = { 
    render ModelView.list() as XML 
} 

請參見以下鏈接Grails的轉換器參考

http://grails.org/Converters+Reference

此外,如果你從同一list動作可以直接使用的要以下

import grails.converters.XML 
class ModelViewController { 

def list() { 
    def modelViews = ModelView.list() 

    withFormat { 
     html modelViews :modelViews 
     js { render "alert('hello')" } 
     xml { render modelViews as XML } 
    } 
    } 
} 

除非您將grails.mime.use.accept.header = true設置添加到Config.groovy文件,否則Grails會忽略HTTP Accept header。換句話說,如果沒有該設置,withFormat()將完全不受Accept header的影響。

+0

這工作和'所有實例的XML表示我一直使用的是什麼,但我實際上想使用腳手架,所以我不必爲CRUD生成所有操作......看起來這是我最好的選擇,除非我能從@bschipp獲得解決方案。 – Jason

0

Grails withFormat是你在找什麼。

不要忘記grails.mime.use.accept.header配置的值設置爲給true

grails.mime.use.accept.header = true