2013-12-18 16 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