欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Grails –使用JAX-RS插件的RESTful Web服务

程序员文章站 2024-03-26 13:41:59
...

我讨论了有关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插件

  1. 在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服务接口。 以下步骤说明了脚手架的用法

  1. 通过命令行创建域类
    1. D:\ Demo \ grails_app \\ TestWSRest>允许createCommand用户
    2. 使用JAXRS插件generateREso生成资源类
      1. 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