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 ...
随机推荐
- linux export source
- zabbix 3.2源码安装
环境: centos7.2 nginx 1.10.3 mysql 5.5.38 php 5.5.38 一.zabbix介绍 1.Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企 ...
- 20170929 微信小程序项目开发
1. 微信小程序环境搭建 请参考官网,哈哈! 2. 微信小程序基础学习 文件结构: 3. 微信小程序实战 4. 目前的逻辑,是从微信小程序的界面和服务器的Web API 进行交互, 有个注意事项就是W ...
- Mac本如何卸载MySQL
Mac本如何卸载MySQL 在Mac上卸载MySQL上一件非常麻烦的事,如果没有卸载干净,就会无法安装新的MySQL 怎样才能完全卸载MySQL呢?(包括所有数据库) 执行以下操作: #打开终端 ...
- 004-docker命令-容器生命周期管理、容器操作
1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...
- [转]如何快速转载CSDN中的博客
原文:https://blog.csdn.net/bolu1234/article/details/51867099 前言 对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时 ...
- C 语言循环结构
25.有如下程序 main() { int i,sum; for(i=1;i<=3;sum++) sum+=i; printf("%d\n",sum); } 该程序的执行 ...
- Day2 Python基础学习——字符串、列表、元组、字典、集合
Python中文学习大本营:http://www.pythondoc.com/ 一.字符串操作 一.用途:名字,性格,地址 name = 'wzs' #name = str('wzs')print(i ...
- 以太坊中的账户、交易、Gas和区块Gas Limit等概念
什么是账户 以太坊账户与我们所知的账户概念有一定相似之处,却又有很大的区别,更不同于比特币中UTXO. 账户分两类: - 外部拥有账户(EOA),也就是普通账户 - 合约账户 普通账户 所谓的普通账户 ...
- 第一弹:超全Python学习资源整理(入门系列)
随着人工智能.大数据的时代到来,学习Python的必要性已经显得不言而喻.我经常逛youtube,发现不仅仅是以编程为职业的程序员,证券交易人员,生物老师,高级秘书......甚至许多自由撰稿人,设计 ...