Jersey入门——注解的使用
本文主要解释Jersey中各种注解的使用
package com.coshaho.learn.jersey; import java.net.URI; import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo; import org.glassfish.grizzly.http.server.HttpServer; import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.resource.Singleton; @Singleton //@Singleton表示单例模式,@PerRequest每个请求对应一个实例,默认为@PerRequest
@Path("helloWorld") //服务名称,紧接port/
public class MyJerseyServer
{
@Path("{sub_path:[a-zA-Z]*}") //服务子路径,可以使用正则表达式,表示响应子路径为任意字母的请求
@GET //表示接受HTTP GET请求,@POST、@PUT和@DELETE同理
@Consumes({MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON}) //接受请求的媒体类型(MIME),不指定则可以接受任务媒体类型
@Produces(MediaType.TEXT_PLAIN) //定义响应媒体类型(MIME),不指定则可以接受任务媒体类型
public String sayHelloWorld(
// 使用路径定义中的sub_path变量
@PathParam("sub_path") String service, // @QueryParam表示接受请求中的参数,@DefaultValue为默认值
@DefaultValue("coshaho") @QueryParam("name") String name, // @Context可以获取请求上下文,包括Application,UriInfo,Request,HttpHeaders,SecurityContext
@Context Request request,
@Context UriInfo uriInfo,
@Context HttpHeaders httpHeader
)
{
System.out.println("Sub path is " + service + ".");
System.out.println("Name is " + name + ".");
System.out.println("Request method is " + request.getMethod() + ", url is " + uriInfo.getRequestUri().toString() + ".");
return "Hello, " + name + ". Service is " + service + ".";
} public static void main(String[] args)
{
URI uri = UriBuilder.fromUri("http://127.0.0.1").port(10000).build();
ResourceConfig rc = new PackagesResourceConfig("com.coshaho.learn.jersey");
try
{
HttpServer server = GrizzlyServerFactory.createHttpServer(uri, rc);
server.start();
}
catch (Exception e)
{
e.printStackTrace();
} try
{
Thread.sleep(1000*1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
} }
package com.coshaho.learn.jersey; import java.util.Iterator; import javax.ws.rs.core.MultivaluedMap; import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig; public class MyJerseyClient
{
public static void main(String[] args)
{
// 创建Jersey Client实例,Client实例很消耗系统资源,需要重用
ClientConfig cc = new DefaultClientConfig();
cc.getProperties().put(ClientConfig.PROPERTY_CONNECT_TIMEOUT, 10*1000);
Client client = Client.create(cc); // 创建web资源,是线程安全的,Client实例和WebResource实例可以在多个线程间安全的共享
WebResource resource = client.resource("http://127.0.0.1:10000/helloWorld/sayHi?name=cauchy"); /**
* 另一种请求方法
URI uri = UriBuilder.fromUri("http://127.0.0.1/helloWorld/sayHello").port(10000)
.queryParam("name", "coshaho").build();
resource = client.resource(uri);
*/ ClientResponse response = resource.get(ClientResponse.class);
// 将HTTP响应打印出来
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("HTTP/1.1 ");
strBuilder.append(response.getStatus() + " ");
strBuilder.append(response.getStatusInfo());
System.out.println(strBuilder.toString());
System.out.println(); MultivaluedMap<String, String> headers = response.getHeaders();
Iterator<String> iterator = headers.keySet().iterator();
while(iterator.hasNext())
{
String headName = iterator.next();
System.out.println(headName + ":" + headers.get(headName));
}
System.out.println(); System.out.println(response.getEntity(String.class));
} }
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-grizzly2</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-grizzly2</artifactId>
<version>1.18</version>
</dependency>
Jersey入门——注解的使用的更多相关文章
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
1.IP简述使用//获取本地主机ip地址对象.InetAddress ip = InetAddress.getLocalHost();//获取其他主机的ip地址对象.ip = InetAddress. ...
- Java Restful框架:Jersey入门示例(官方例子)
本文主要介绍了Java Restful框架Jersey入门例子(来源于官方网站https://jersey.java.net/),废话不多说进入正题. 在Jersey官方示例中(https://jer ...
- jersey常用注解解释 JAX-RS常用注解:
jersey常用注解解释: Annotation 作用 说明 @GET 查询请求 相当于数据库的查询数据操作 @PUT 更新请求 相当于数据库的更新数据操作 @POST 插入请求 相当于数据库的插入数 ...
- Jersey 入门与Javabean
Jersey是JAX-RS(JSR311)开源参考实现用于构建RESTful Web service,它包含三个部分: 核心服务器(Core Server) 通过提供JSR 311中标准化的注释和AP ...
- Jersey入门一:从Maven Archetype创建jersey项目
1.用Ctrl+空格调出Spotlight搜索,输入ter调出终端窗口  2.在终端窗口进入将创建jersey项目的目录:  3.输入如下命令,创建一个名为的simple-service项目: m ...
- Spring入门注解版
参照博文Spring入门一,以理解注解的含义. 项目结构: 实现类:SpringHelloWorld package com.yibai.spring.helloworld.impl; import ...
- spring入门-注解的使用
说明: 使用注解和使用配置文件实现的功能是一样的,都是为了解耦,但是配置文件语法属于非编程语言法语,无法调试,难以定位bug,使用注解更易定位问题. 配置步骤 编译器必须先安装了STS插件 第一步 导 ...
- Jersey入门——对Json的支持
Jersey rest接口对POJO的支持如下: package com.coshaho.learn.jersey; import java.net.URI; import javax.ws.rs.C ...
- Jersey入门三:创建一个JavaEE的Web项目
1.在终端中输入如下命令,创建一个名为的simple-service-webapp项目: mvn archetype:generate -DarchetypeArtifactId=jersey-qui ...
随机推荐
- 那些年读过的书《Java并发编程实战》一、构建线程安全类和并发应用程序的基础
1.线程安全的本质和线程安全的定义 (1)线程安全的本质 并发环境中,当多个线程同时操作对象状态时,如果没有统一的状态访问同步或者协同机制,不同的线程调度方式和不同的线程执行次序就会产生不同的不正确的 ...
- 关于webpack,babel,以及es6和commonJS之间的联系(转)
add by zhj: babel是将es6转为es5,而webpack从名字也能看出来,是一个打包工具,根据文件之间的依赖关系,将文件进行打包 原文:https://blog.csdn.net/a2 ...
- js判断开始时间不能小于结束时间
function validTime(startTime,endTime){ var arr1 = startTime.split("-"); var arr2 = e ...
- 八、自定义starter
starter: 1.这个场景需要使用到的依赖是什么? 2.如何编写自动配置 @Configuration //指定这个类是一个配置类 @ConditionalOnXXX //在指定条件成立的情况下自 ...
- mysql 查询优化杂谈
一.把某些判断移动到应用层 我们需要在一张表里面删除某种类型的数据,大概的表结构类似这样: CREATE TABLE t ( id INT, tp ENUM ("t1", &quo ...
- (1.10)SQL优化——mysql 常见SQL优化
(1.10)常用SQL优化 insert优化.order by 优化 1.insert 优化 2.order by 优化 [2.1]mysql排序方式: (1)索引扫描排序:通过有序索引扫描直接返回有 ...
- [django]django配合前端vue前后端联调,django服务端解决跨域(django-cors-headers)
django内部csrf post提交数据解决 https://www.cnblogs.com/iiiiiher/articles/9164940.html 前端写了个页面,里面$.post发现403 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(六)RTP音视频传输解析层之音视频数据传输格式
一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有 ...
- lambda 表达式拼接
类库: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions ...
- 家庭记账本之微信小程序(一)
记得ppt中说到,可以制作为微信小程序或者是安卓的应用,但是在我了解后觉得小应用有点力不从心,所以还是从微信小程序开始吧,先让我们了解一下主要的东西 1.准备工作 IDE搭建2.知识准备从零开始app ...