我讨论了有关RESTful体系结构的注意事项,以及如何使用 JAVA中的Jersey JAX-RS [JSR 311]构建RESTful Web服务 。 今天,我将讨论如何使用Grails框架构建RESTful Web服务。
GRAILs框架是提供端到端解决方案的平台,从头开始构建Web应用程序以提高直观的RIA Web应用程序。 Grails可能是您所有企业应用程序开发的一站式服务。 Grails是模块化的,允许您选择适合您的应用程序的模块。
Grails基于插件,倡导“约定优于配置”。 它提供了使用各种最新插件(例如H2,JQuery和EHCache等)构建应用程序的平台。请参阅此处以获得对Grails的更多了解。
在Grails配置文件(即BuildConfig.groovy)中配置插件非常容易。 在开始构建RESTful Web服务之前,我们需要使用以下命令创建grail应用程序。
grails_apps> grails create-app TestWSRest
| Created Grails Application at D:\Demo\grail_app\ TestWSRest
上面的命令将创建具有初始应用程序开发所需的必要环境的TestWSRest应用程序。 创建grails应用程序后,我们必须按照以下步骤安装JAX-RS的RESTful插件
- 在BuildConfig.grovvy中添加JAXRS插件
plugins {
compile ":jaxrs:0.8"
}
在命令提示符下运行install plugin命令
D:\Demo\grail_app\ TestWSRest>grails InstallPlugin jaxrs
上面的命令会将Jaxrs插件安装到grails项目名称TestWSRest中
注意: JAXRS是用于grails的JSR 311实现插件
资源资源
由于RESTful Web服务基于面向资源的架构师。 我们必须创建将映射到URL的资源,以通过HTTP访问这些资源。
上面的命令将创建UserResource.groovy和UserResourceTest.groovy
D:\Demo\grails_app\\TestWSRest>grails create-resource Users
| Created file grails-app/resources/testwsrest/UsersResource.groovy
| Created file test/unit/testwsrest/UsersResourceTests.groovy
package testwsrest
class UserService {
//Get list of users from DB
def getUser() {
return User.list()
}
//Create User in DB
def addUser(User user){
user.save()
return user
}
}
上面的资源将映射http:// localhost:8080 / TestWSRest / api / users以使用HTTP GET方法访问方法getUsersRepresentation。 方法名称可以是任何东西,但为了更好,我们必须使用逻辑名称
运行应用程序
要启动该应用程序,请首先使用以下命令和以下URL运行Grails应用程序
grails run-app
浏览器现在应显示“ Hello Users”
使用Grails RESTful Web进行CRUD操作
为了在User中操作CRUD操作,请创建UserService类,该类将使用User域在数据库的User表中执行CRUD操作
首先,我们将创建UserService,它将对用户域User进行RDBMS处理。 在这里,我们将创建两个方法getUser获取用户列表,并创建addUser在数据库中插入用户记录
package testwsrest
class UserService {
//Get list of users from DB
def getUser() {
return User.list()
}
//Create User in DB
def addUser(User user){
user.save()
return user
}
}
资源:
我们将修改现有的UserResource并添加带有@GET注释的getUser和带有@POST注释的createUser来处理GET和POST HTTP操作。
- @Path将由用户定义资源的位置
- @Consumes和@Produces分别定义消费和生产的内容类型。
- XML转换器是将域对象转换为XML的软件包
依赖注入 :我们将通过仅在资源类内部声明服务类,使用Grail依赖注入将UserService注入UserResource。 Grails框架实习生使用Spring依赖项注入来自动注入服务。
package testwsrest
import grails.converters.XML
import javax.ws.rs.Consumes
import javax.ws.rs.GET
import javax.ws.rs.POST
import javax.ws.rs.Path
import javax.ws.rs.Produces
@Path('/api/users')
@Consumes(['application/xml','application/json'])
@Produces(['application/xml','application/json'])
class UsersResource {
UserService userService// automatically inject(IOC) to UserResource
@GET
String getUsers() {
def xml =userService.getUser() as XML
return xml
}
@POST
String createUsers(User user) {
userService.addUser(user)
return user as XML
}
}
测试中
package testwsrest
import org.grails.jaxrs.itest.IntegrationTestCase
import org.junit.Test
import static org.junit.Assert.*
class UsersResourceTests extends IntegrationTestCase {
@Test
void testPostAndGet() {
def headers = ['Content-Type':'application/json', 'Accept':'application/xml']
def content = '{"class":"testwsrest.User","username":"Sam","password":"Hill"}'
def expected = '[<?xml version="1.0" encoding="UTF-8"?><user id="1"><password>Hill</password><username>Sam</username></user>]]'
def User user=new User();
user.setUsername("John")
user.setPassword("[email protected]")
// create new User
sendRequest('/api/users', 'POST', headers, content.bytes)
assertEquals(200, response.status)
assertEquals(expected, response.contentAsString)
assertTrue(response.getHeader('Content-Type').startsWith('application/xml'))
// get users
sendRequest('/api/users', 'GET', headers)
assertEquals(200, response.status)
assertEquals("[${expected}]".toString(), response.contentAsString)
assertTrue(response.getHeader('Content-Type').startsWith('application/json'))
}
}
以下是使用IntegrationTestCase的简单集成测试
使用脚手架的RESTful服务:
grails-jaxrs插件支持脚手架,以基于域类生成RESTful服务接口。 以下步骤说明了脚手架的用法
- 通过命令行创建域类
- D:\ Demo \ grails_app \\ TestWSRest>允许createCommand用户
- 使用JAXRS插件generateREso生成资源类
- D:\ Demo \ grails_app \\ TestWSRest> grails生成资源用户
上面的命令将基于用户域自动生成RESTful Web服务
结论
在本文中,我讨论了如何使用JAXS插件在Grails框架中创建RESTful Web服务。 您可以从下载链接下载完整的源代码 。
翻译自: https://www.javacodegeeks.com/2013/07/grails-restful-webservice-using-jax-rs-plugin.html