eos支持java吗_EOS之REST 开发参考

1 概述 ............................................................................................................................................................. 1

2 开发参考 .................................................................................................................................................... 2 2.1 依赖 ................................................................................................................................................... 2 2.1.1 Maven 项目依赖 ................................................................................................................................. 2 2.1.2 JAR 包依赖 ............................................................................................................................................ 2 2.2 配置 ................................................................................................................................................... 2 2.2.1 参数说明 ................................................................................................................................................. 2 2.2.2 web.xml 配置 ........................................................................................................................................ 3 2.2.3 参数配置文件 ...................................................................................................................................... 4 2.3 注解 ................................................................................................................................................... 5 2.3.1 JAX-RS 注解 ........................................................................................................................................ 5 2.3.2 扩展注解 ................................................................................................................................................. 6

3 开发示例 .................................................................................................................................................... 7 3.1 创建 RestFul 服务类 .................................................................................................................. 7 3.2 创建参数配置文件 restconfig.properties ............................................................................ 9 3.3 配置 web.xml ................................................................................................................................. 9 3.4 访问测试 ........................................................................................................................................10

1 概述

REST组件是在开源Resteasy框架基础上扩展出的一个RESTFul Web Services框架。

它是基于 JAX-RS 规范的一个完整实现,可以很方便的构建 RESTFul Web Services。

组件针对于多对象传参支持能力不足做出扩展。支持参数从 JSON 提交大对象中选择

子对象,接口在定义上可以更加灵活,支持多对象参数(如接口参数为多个 JAVA BEAN 等

场景) ,支持 SDO 对象、CriteraType 等特殊对象的序列化、反序列化。

2

2 开发参考

2.1 依赖

2.1.1 Maven 项目依赖

com.primeton.components.restresteasy-jaxrs3.0.0com.primeton.components.restcom.primeton.components.rest3.0.0com.primeton.components.restjaxrs-api3.0.0com.primeton.components.restresteasy-jackson-provider3.0.0

2.1.2 JAR 包依赖

rest-3.0.0.zip 中所有的 jar 包

2.2 配置

2.2.1 参数说明

参数 默认值 描述

resteasy.servlet.mapping.prefix 无 如果对应的 servlet-mapping 的 url-pattern 不是

3

/*,该属性用来定义默认的前缀。

resteasy.scan false 是否自动扫描 WEB-INF/lib 下的所有 jar 包和

WEB-INF/classes 目录下的所有@Provider 注

解或者 JAX-RS 注解(@Path, @GET, @POST

等等)的类并且注册

resteasy.scan.providers false 是否自动扫描 WEB-INF/lib 下的所有 jar 包和

WEB-INF/classes 目录下的所有@Provider 注

解的类并且注册

resteasy.scan.resources false 是否自动扫描 WEB-INF/lib 下的所有 jar 包和

WEB-INF/classes 目录下的所有 JAX-RS 注解

(@Path, @GET, @POST 等等)的类并且注册

resteasy.providers 无 逗号分隔的所有@Provider 注解类全名

resteasy.resources 无 逗号分隔的 JAX-RS 标准注解的类全名。

javax.ws.rs.Application 无 自定义启动类Application。用来自定义需要加载

的资源。

2.2.2 web.xml 配置

rest.config.locations

classpath:config/restconfig.properties,

classpath*:config/restconfig.properties,

file:C:\Primeton\Platform\eos\restconfig.properties,

web-inf:restconfig/restconfig.properties

4

resteasy.servlet.mapping.prefix

/rest/services

myresteasy

com.primeton.components.rest.extend.CustomHttpServletDispatcher

myresteasy

/rest/services/*

说明:

1.需要servlet、servlet-mapping配置,servlet的类为

com.primeton.components.rest.extend.CustomHttpServletDispatcher

2.上下文参数“rest.config.locations”:用来配置参数配置文件(properties文件,文

件说明见2.2.3)的路径,支持多个配置文件,多个配置文件通过“,”分隔。

支持四种路径配置方式:

classpath 只会找到符合路径的第一个文件

classpath* 会找出所有符合路径的文件进行加载

file 文件系统文件

web-inf WEB-INF目录下文件

2.2.3 参数配置文件

1.配置文件必须为properties文件,否则不会解析

5

2.文件内容如:

resteasy.resources=com.primeton.rest.UserController

resteasy.injector.factory=com.primeton.components.rest.extend.JSONInjectorFactoryImpl

3.resteasy.resources参数支持多个配置,即使多个文件中都有该属性,也不会覆盖。

同一个properties文件中,多个值,需要通过“,”分隔。

2.3 注解

2.3.1 JAX-RS 注解

注解名 说明

@Path @Path 注解的值是一个相对的 URI 路径,这个路径指定了该 Java 类的

位置,例如/helloworld。在这个 URI 中可以包含变量,例如可以获取用

户的姓名然后作为参数传入 URI 中:/helloworld/{username}。

@GET @GET 注解是请求方法指示符,这个指示符注解的 Java 方法会处理

HTTPGET 请求。资源的行为由资源回应的 HTTP 方法决定。

@POST @POST 注解是请求方法指示符,这个指示符注解的 Java 方法会处理

HTTPPOST 请求。资源的行为由资源回应的 HTTP 方法决定。

@PUT @PUT 注解是请求方法指示符,这个指示符注解的 Java 方法会处理

HTTPPUT 请求。资源的行为由资源回应的 HTTP 方法决定。

@DELETE @DELETE 注解是请求方法指示符,这个指示符注解的 Java 方法会处

理 HTTPDELETE 请求。资源的行为由资源回应的 HTTP 方法决定。

@HEAD @HEAD 注解是请求方法指示符,这个指示符注解的 Java 方法会处理

HTTPHEAD 请求。资源的行为由资源回应的 HTTP 方法决定。

@PathParam @PathParam 注解是可以抽取并用在资源类中的一类参数。URIpath 参

数是从请求的 URI 中抽取的,而且参数的名称和@Path 注解中定义的

变量名对应。

@QueryParam @QueryParam 注解是可以抽取并在资源类中使用的一类参数。Query

参数是从请求 URI 的查询参数中抽取的。

@Consumes @Consumes注解是用来指定资源能够接受的客户发送的MIME媒体类

6

型。

@Produces @Produces 注解用来指定资源能够生成并发送给客户端的 MIME 媒体

类型,例如“text/plain”.

@Provider @Provider 注解用在任何对 JAX-RS 运行时(如 MessageBodyReader

和 MessageBodyWriter)有意义的事物上。对 HTTP 请求,

MessageBodyReader 用来将 HTTP 请求实体段映射为方法参数。在响

应的时候,返回的值使用 MessageBodyWriter 来映射成 HTTP 响应实

体段。如果应用程序需要提供其他的元数据,如 HTTP 头或不同的状态

代码,方法可以返回一个打包了实体的 Response,该 Response 可以

使用 Response.ResponseBuilder 创建。

2.3.2 扩展注解

注解 说明

@JSONParam 用来从 JSON 对象中选择自己想要的属性。如 POST 提交的 JSON

{

user1:{userId:’sysadmin’,username:’sysadmin’},

user2:{userId:’admin’,username:’admin’}

}

接口上想分别获取 user1 和 user2 两个属性,那么接口参数就可以定

义为

(@JSONParam(“user1”) User user1, @JSONParam(“user2”) User

user2)

7

3 开发示例

3.1 创建 RestFul 服务类

package com.primeton.rest;

import java.util.HashMap;

import java.util.Map;

import javax.ws.rs.Consumes;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.MediaType;

import com.primeton.components.rest.annotation.JSONParam;

@Path("/book")

publicclass BookController {

/**

* 获取书名

* @param bookId

* @return

*/

@GET

@Path("/getBookName/{bookId}")

public String getBookName(@PathParam("bookId") String bookId){

return"HelloWorld";}

/**

8

* 保存操作

* POST的json格式如

* {

* book1:{bookId:'1',bookName:'book1'},

* book2:{bookId:'2',bookName:'book2'}

* }

* @param book

* @param book2

*/

@POST

@Path("/saveBooks")

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_JSON)

public Map getBook(@JSONParam("book1") Book

book1,@JSONParam("book2") Book book2){

//do save books

Map result = new HashMap();

result.put("result", "success");

result.put("book1", book1);

result.put("book2", book2);

return result;

}

/**

* 获取书详细信息

* POST提交的json格式如:

* {

* bookId:'1'

* }

9

* @Produces值为返回值可以为java bean,Map,List,Object[] 等各种类型。

* @param bookId

* @return

*/

@POST

@Path("/getBookObject")

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_JSON)

public Book getBookObject(@JSONParam("bookId") String bookId){

Book book = new Book();

book.setBookId(bookId);

book.setBookName("HelloWorld");

return book;

3.2 创建参数配置文件 restconfig.properties

resteasy.resources=com.primeton.rest.BookController

resteasy.injector.factory=com.primeton.components.rest.extend.JSONInjectorFactoryImpl

resteasy.servlet.mapping.prefix=/rest/services

3.3 配置 web.xml

rest.config.locations

classpath: config/restconfig.properties

restServlet

10

com.primeton.components.rest.extend.CustomHttpServletDispatcher

restServlet

/rest/services/*

3.4 访问测试

1.获取书名

启动服务后直接在浏览器中访问:

http://localhost:8080/rest_project/rest/services/book/getBookName/1

看到返回值“HelloWorld”证明访问成功。

2.保存数据

在测试 html 页面中通过 ajax 发请求进行测试,ajax 代码如下 $.ajax({ url:'http://localhost:8080/rest_project/rest/services/book/saveBooks', type:'POST', data:JSON.stringify({ book1:{bookId:'1',bookName:'book1'}, book2:{bookId:'2',bookName:'book2'}, }), contentType:'application/json', dataType:'json', success:function(ret){ alert('result:'+ret.result+" ; book1: "+ret.book1.bookName+" ; book2: "+ret.book2.bookName); }, error:function(ret){ alert("error"); }

11

});

看到页面 alert 出“result:success ;book1:book1; book2:book2”说明调用成功。

3.查询数据

在 html 测试页面中通过 ajax 发请求进行测试,ajax 代码如下 $.ajax({ url:'http://localhost:8080/rest_project/rest/services/book/getBookObject', type:'POST', data:JSON.stringify({ bookId:'1' }), contentType:'application/json', dataType:'json', success:function(book){ alert("bookId: "+book.bookId+" ; bookName: "+book.bookName); }, error:function(ret){ alert("error"); } });

看到页面 alert 出“bookId:1; bookName:HelloWorld”说明调用成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值