【问题标题】:Responding with XML when using Grails scaffolding使用 Grails 脚手架时使用 XML 响应
【发布时间】:2013-12-18 03:23:01
【问题描述】:

我有一个用于遗留数据库的 POJO,我为它创建了这个脚手架:

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。

我的最终目标是让 Jersey 代码在 Java 应用程序中获取 XML,如下所示:

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 获取 HTML,而不是它请求的 XML。

如何让 Grails 发送 XML?

【问题讨论】:

  • XML 什么。你想要ModelView 的所有实例的 xml 表示吗

标签: java xml grails jersey


【解决方案1】:

如果您想要所有 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 会忽略HTTP Accept header,除非您将grails.mime.use.accept.header = true 设置添加到您的Config.groovy 文件中。换句话说,withFormat() 将完全不受 Accept header 没有该设置的影响。

【讨论】:

  • 这行得通,也是我一直在使用的,但我实际上想使用脚手架,所以我不必为 CRUD 生成所有动作......看起来这是我最好的选择,除非我可以从@bschipp 那里得到解决方案。
【解决方案2】:

您可以执行此操作的一种方法是安装 grails Scaffolding 插件 (http://grails.org/doc/latest/guide/scaffolding.html),它允许您覆盖默认控制器和视图模板,这些模板用于生成您所描述的完整的“精彩 HTML 页面”增删改查。然后,您将能够在控制器模板中的操作上添加 Jersey 代码,并且您为其生成脚手架的每个新页面都将具有此操作。

一切顺利。

【讨论】:

    【解决方案3】:

    Grails withFormat 就是你要找的东西。

    不要忘记将grails.mime.use.accept.header config 的值设置为true

    grails.mime.use.accept.header = true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 2012-01-18
      • 2013-04-26
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多