Java 如何将SpringRoo或Grails项目从典型的MVC切换到AJAX/JSON/REST
这似乎是一个奇怪的问题,但我正试图弄清楚转换应用程序的“最佳实践”是什么,该应用程序被设置为使用Roo或Grails生成的控制器(提供基本CRUD功能)返回JSON响应主体以在JavaScript应用程序中使用 这里技术的模糊性是因为我还没有真正开始这个项目。我仍在努力决定使用哪种(基于Java的)技术,并看看在此过程中我应该学习/使用哪种生产力工具。它将是一个web应用程序,并且将使用数据库持久层。所有其他细节都悬而未决 也许实现我的目标最简单的方法是使用某种AJAX插件开始开发,但是大多数教程和描述都说从普通的MVC架构开始。Roo似乎很难将它生成的控制器转换为JSON友好的返回类型,我对Groovy/Grails还不太熟悉,不知道需要做什么 这对我来说主要是一次学习经历,我愿意接受任何批评或建议,但作为一个问答论坛,我意识到我需要纳入某种客观问题。为了满足这一需要,我要求:Java 如何将SpringRoo或Grails项目从典型的MVC切换到AJAX/JSON/REST,java,model-view-controller,grails,groovy,spring-roo,Java,Model View Controller,Grails,Groovy,Spring Roo,这似乎是一个奇怪的问题,但我正试图弄清楚转换应用程序的“最佳实践”是什么,该应用程序被设置为使用Roo或Grails生成的控制器(提供基本CRUD功能)返回JSON响应主体以在JavaScript应用程序中使用 这里技术的模糊性是因为我还没有真正开始这个项目。我仍在努力决定使用哪种(基于Java的)技术,并看看在此过程中我应该学习/使用哪种生产力工具。它将是一个web应用程序,并且将使用数据库持久层。所有其他细节都悬而未决 也许实现我的目标最简单的方法是使用某种AJAX插件开始开发,但是大多数教
在Roo和/或Grails中为我的实体设置AJAX/RESTful接口的最佳方法是什么?我最近在Grails应用程序中做到了这一点,并发现使用生成的控制器并让它们根据内容协商从视图中输出JSON或XML或HTML非常容易 Grails手册中要研究的地方是关于内容协商的部分,如果需要处理JSON或XML输入,还包括封送
为了获得JSON和XML输出,在默认的
list()
方法中,将其更改为以下内容(我有一个Session
对象,在本例中……我的一个域类):
默认情况下,只要返回一个对象,就需要用withFormat
块替换返回的值
您可能还需要更新处理mime类型的Config.groovy文件。以下是我所拥有的:
grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
grails.mime.use.accept.header = true
grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
xml: ['text/xml', 'application/xml'],
text: 'text/plain',
js: 'text/javascript',
rss: 'application/rss+xml',
atom: 'application/atom+xml',
css: 'text/css',
csv: 'text/csv',
all: '*/*',
json: ['application/json','text/json'],
form: 'application/x-www-form-urlencoded',
multipartForm: 'multipart/form-data'
]
作为输入(例如,到
update()
或save()
操作),JSON和XML有效负载将自动被取消编组,并将像表单输入一样绑定,但我发现取消编组过程有点挑剔(尤其是对于JSON)
我发现,为了在
update()
方法中正确处理JSON,必须在入站JSON对象上存在class
属性。由于我在客户机应用程序中使用的库没有使这成为一个容易处理的问题,因此我转而使用XML。感谢您如此详尽的回答!这正是我要找的东西。
grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
grails.mime.use.accept.header = true
grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
xml: ['text/xml', 'application/xml'],
text: 'text/plain',
js: 'text/javascript',
rss: 'application/rss+xml',
atom: 'application/atom+xml',
css: 'text/css',
csv: 'text/csv',
all: '*/*',
json: ['application/json','text/json'],
form: 'application/x-www-form-urlencoded',
multipartForm: 'multipart/form-data'
]