Grails Web服务

2024-01-08 17:58
文章标签 服务 web grails

本文主要是介绍Grails Web服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

Web服务

Web服务就是让你的web应用提供一套web API,通常用SOAP 或 REST来实现。 .

1 REST

REST就本身而言不是一种技术,而是一种架构模式。is not really a technology in itself, but more an architectural pattern. REST非常简单,以普通XML或JSON作为通信机制,结合可以表现底层系统状态的URL形式和 HTTP方法如 GET, PUT, POST和 DELETE.

每一个HTTP方法映射到一个action,如用GET方法获取数据,用PUT方法创建数据,用POST更新数据等等。在这个意义上 REST非常适合 CRUD.

 

URL形式

要用Grails实现REST,第一步就是提供REST形式的URL映射 URL映射:

 

static mappings = {"/product/$id?"(resource:"product")
}

这就将URI /product 映射到 ProductController. 在controller内部每个HTTP方法,GET,PUT,POST和DELETE都映射到一个action上,如下表所示:

 

方法Action
GETshow
PUTupdate
POSTsave
DELETEdelete

可以通过URL映射机制修改HTTP方法和URL的映射关系:

 

"/product/$id"(controller:"product"){action = [GET:"show", PUT:"update", DELETE:"delete", POST:"save"]
}

但是在这个例子中,Grails并不像前面使用过的resource 参数那样自动提供XML或JSON序列化,除非提供在URL映射中提供parseRequest 参数:

 

"/product/$id"(controller:"product", parseRequest:true){action = [GET:"show", PUT:"update", DELETE:"delete", POST:"save"]
}

 

XML序列化 - 读取

controller可通过Grails提供的 XML序列化机制 来实现GET方法:

 

import grails.converters.*
class ProductController {def show = {if(params.id && Product.exists(params.id)) {def p = Product.findByName(params.id)render p as XML}else {def all = Product.list()render all as XML}}..
}

这里,如果参数中指定id,通过id 搜索Product 如果指定id的Product存在,则返回该Product,否则返回所有Product. 这样,如果访问 /products我们会得到所有的Product,如果访问/product/MacBook,我们只获取到一个MacBook记录.

 

XML序列化 - 更新

为支持PUTPOST 你可以使用 params 对象。Grails中params对象具有读取XML数据包的能力。如下面的XML数据包:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<product><name>MacBook</name><vendor id="12"><name>Apple</name></vender>
</product>

你可以通过在 数据绑定章节描述过的同样的方法,通过 params 对象来读取XML数据:

 

def save = {def p = new Product(params['product'])

if(p.save()) { render p as XML } else { render p.errors } }

在这个例子中,通过提取 params 对象中的 'product'对应的值,我们可以通过Product的构建器自动创建和绑定XML数据 。 注意这一行:

def p = new Product(params['product'])

这里我们不需要修改任何代码就可以以处理XML数据请求的方法处理表单提交。同样的方法也可以用来处理JSON请求.

 

如果需要对不同的客户端(REST,HTML等)提供不同的响应,你可以使用 content negotation

The Product object is then saved and rendered as XML, otherwise an error message is produced using Grails' validation capabilities in the form:

 

<error><message>The property 'title' of class 'Person' must be specified</message>
</error>

2 SOAP

Grails通过 XFire 插件来支持SOAP。XFire插件使用流行的XFire SOAP协议栈,它允许你通过特定的expose属性将Grails的 services 作为SOAP服务提供:

 

class BookService {

static expose=['xfire']

Book[] getBooks(){ Book.list() as Book[] } }

WSDL文件可通过: http://127.0.0.1:8080/your_grails_app/services/book?wsdl获取

更多信息参考XFire插件的wiki 文档 。

3 RSS和Atom

Grails没有直接提供对RSS和Atom的支持. You could construct RSS or ATOM feeds with the render method's XML capability. 可以通过Grails Feeds插件来构建RSS和Atom。改插件使用流行的 ROME 库. 下面是简单使用这个插件的例子:

 

def feed = {render(feedType:"rss", feedVersion:"2.0") {title = "My test feed"link = "http://your.test.server/yourController/feed"

Article.list().each() { entry(it.title) { link = "http://your.test.server/article/${it.id}" it.content // return the content } } } }

这篇关于Grails Web服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584335

相关文章

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat