文档章节

RESTful WebService

蜡笔小小小新
 蜡笔小小小新
发布于 2016/04/14 16:17
字数 1107
阅读 108
收藏 1
点赞 1
评论 0

1 导Jersey的jar包

Jersey只是支持REST服务的框架之一。


2 配置REST服务

就是在web.xml配置一个servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>RESTSample</display-name>
  
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.lin.rest.service</param-value><!-- 这个包下的类全部发布为rest服务 -->
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>


3 资源

package com.lin.rest.service;

import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import com.lin.rest.domain.User;

@Path("/service")
public class Service {
    
    @Path("/method_post")
    @POST
    @Produces(MediaType.TEXT_PLAIN)//返回给客户端的格式是什么,有字符串,json,html,xml等
    public void servicePOST(@FormParam("name") String name)
    {
        System.out.println("Service. Method:POST..."+name);
    }
    
//    @Path("/service/get")
//    @GET
//    @Produces(MediaType.TEXT_HTML)
//    public String serviceGet(@QueryParam("name") String name)
//    {
//        return "Service. Method:POST...";
//    }
    
    @Path("/method_get")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public User serviceGetObject(@QueryParam("id") int id)
    {
        return new User(id, "test@123.com", "test123");
    }

}


处理post请求的方法参数用@FormParam注解,处理get请求的方法参数用@QueryParam注解

4 访问

运行Tomcat后在浏览器访问:

http://localhost:8080/RESTSample/rest/service/method_get?id=1

这是在浏览器看到的就是服务返回的结果了。


5 如何返回一个对象

5.1 自定义一个对象

有时需要返回一个对象,那么需要在类上加上@XmlRootElement注解。比如服务返回一个user对象

package com.lin.rest.domain;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {
    
    private int id;
    private String email;
    private String password;
    
    public User() {
    }

    public User(int id, String email, String password) {
        super();
        this.id = id;
        this.email = email;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", email=" + email + ", password=" + password
                + "]";
    }

}


5.2 资源

设置返回的类型是XML。

@GET
    @Produces(MediaType.APPLICATION_XML)
    public User serviceGetObject(@QueryParam("id") int id)
    {
        return new User(id, "test@123.com", "test123");
    }


5.3 访问服务


另外还可以返回JSON哟!把返回类型设置成json就行了。。。

@GET
    @Produces(MediaType.APPLICATION_JSON)
    public User serviceGetObject(@QueryParam("id") int id)
    {
        return new User(id, "test@123.com", "test123");
    }


访问服务


能得到json就比较亲切了,接下来有可以干很多事情了。。。。。


5.4 java怎么访问REST服务

不像SAOP webservice访问那么方便,SAOP webservice提供一个wsdl文档,通过CXF帮助直接生成一些服务端代理。

访问REST服务就是访问一个HTTP接口吧。apache的HttpClient可以给我们提供更加便利的帮助。

首先需要的jar包:

  1. httpclient-4.4.jar

  2. httpcore-4.4.jar

  3. commons-logging-1.2.jar

  4. commons-codec-1.9.jar


访问http get方法:

package com.lin.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class InvokeREST {

    public static void main(String[] args) {

        try {

            CloseableHttpClient httpClient = HttpClients.createDefault();
            //也可以封装成URI对象
//URI uri = new URIBuilder().setScheme("http")
  //                  .setHost("localhost").setPath(":8080/RESTSample/rest/service/method_get")
        //            .setParameter("id", "1").build();
            HttpGet get = new HttpGet("http://localhost:8080/RESTSample/rest/service/method_get?id=1");
            
            get.addHeader("User-Agent", "Mozilla/5.0");
            CloseableHttpResponse httpResponse = httpClient.execute(get);

            System.out.println("GET Response Status:: "
                    + httpResponse.getStatusLine().getStatusCode());
            
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpResponse.getEntity().getContent()));
            
            String inputLine;
            StringBuffer response = new StringBuffer();
            while((inputLine = reader.readLine()) != null)
            {
                response.append(inputLine);
            }
            
            System.out.println(response.toString());
            /**
             * close client
             */
            httpClient.close();
            reader.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}


运行结果:




访问http post方法:

package com.lin.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;

public class InvokeREST {

    public static void main(String[] args) {
        
        try {
            
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost("http://localhost:8080/RESTSample/rest/service/method_post");
            httpPost.addHeader("User-Agent", "Mozilla/5.0");

            List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();//表单参数
            urlParameters.add(new BasicNameValuePair("name", "Chi Lin"));

            HttpEntity postParams = new UrlEncodedFormEntity(urlParameters);
            httpPost.setEntity(postParams);

            CloseableHttpResponse httpResponse = httpClient.execute(httpPost);

            System.out.println("POST Response Status:: "
                    + httpResponse.getStatusLine().getStatusCode());

            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpResponse.getEntity().getContent()));

            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = reader.readLine()) != null) {
                response.append(inputLine);
            }
            reader.close();

            // print result
            System.out.println(response.toString());
            httpClient.close();
            
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }
}


运行结果:


此时response status是204,说明post请求成功。因为服务方法没有返回值,所以空指针。。。

© 著作权归作者所有

共有 人打赏支持
蜡笔小小小新
粉丝 32
博文 104
码字总数 75210
作品 0
深圳
后端工程师
Android Restful Webservice Tutorial– 1

Here in Android Tutorial Blog, we have already discussed lot about using Webservice in Android applications. Take a look at Android Webservice Tutorial to know list of articles ......

JayPark不作死 ⋅ 2014/08/18 ⋅ 0

spring+restful service

Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的。关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述...

游宵 ⋅ 2014/04/25 ⋅ 0

综合技术 --restful webservice

//restful webservice入门,代码理解部分 http://lavasoft.blog.51cto.com/62575/229206/ http://www.blogjava.net/Hafeyang/archive/2009/02/05/253458.html //restful webservice具体操作,......

求是科技 ⋅ 2015/04/07 ⋅ 0

restful 笔记一

restful:webService,与传统webservice相比,http传输方式为json 或者xml,而传统rpc-webservice(soap协议)只采用xml方式。1、面向资源,各个资源之间是不存在关联的,http的方法用到 post...

AIting ⋅ 2016/11/27 ⋅ 0

Jboss RestEasy构建简单的RESTful Web Services示例(1)

项目上要用到webservice,鉴于现在restful webservice比较流行,打算用restful来建立webservice,网上搜了一遍,认为Jboss的RESTEasy比较容易上手,于是就用它来小试牛刀! RESTEasy是JBoss...

Eric_HSBC ⋅ 2013/08/19 ⋅ 0

spring mvc已经可以实现RESTFUL webservice,有没有必要spring整合cxf来实现RESTFUL webservice呢?

就是用spring mvc已经可以实现RESTFUL webservice,有没有必要spring整合cxf来实现RESTFUL webservice呢?

BenChao ⋅ 2014/12/01 ⋅ 12

RESTFUL WebService 的初探(一)

近期要做一个与arcgis rest 相关的服务,由于自己本身对rest不是很了解,所以今天学习了下restful webservice相关的知识,在这里给大家分享下,欢迎大家多提意见。 一、restful 是什么: RE...

水稻 ⋅ 2015/01/16 ⋅ 0

了解restful webservice概念

了解REST REST 描述了一个架构样式的互联系统(如 Web 应用程序)。REST 约束条件作为一个整体应用时,将生成一个简单、可扩展、有效、安全、可靠的架构。由于它简便、轻量级以及通过 HTTP 直...

mckee ⋅ 2013/07/16 ⋅ 0

http接口、api接口、RPC接口、RMI、webservice、Restful等概念

在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当。 http接口:基于HTTP协议的开发接口.这个并不能排除没有使用其他的协议。 api接口:API(Application Program...

一一叶 ⋅ 2015/08/31 ⋅ 1

基于SOA 思想下的WebService实战资料分享

跟大家分享基于SOA 思想下的WebService实战(电子商务需求,分析,架构全涉及,百万数据优化) 课程讲解内容涵盖: 第1章 CXF框架快速起步(2课时) Webservice技术规则 Java-WebService技术规范...

abcfhl ⋅ 2013/06/24 ⋅ 7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 9分钟前 ⋅ 0

如何使用serverchan微信推送告警

之前实现推送告警信息到微信的方法有如下几种: 1、通过企业公众号实现----收费: 2、通过QQ邮箱,在微信平台上开启收到邮件进行提醒; 3、第三方告警平台API,一般也是收费的; 不过最近看文...

问题终结者 ⋅ 35分钟前 ⋅ 0

TCP的RPC

RPC就是远程方法调用(Remote Process Call ),包含了客户端和服务端,涉及了对象的序列化传输。 1.服务端启动,注册远程调用的类2.客户端发送请求信息包含类、方法、参数的一些信息、序列化传...

Cobbage ⋅ 56分钟前 ⋅ 0

IOS-UI UI初步代码布局添加事件

ISO开发界面,UI是必须学习的一部分,其实很早之前想学来了,一直没有沉下心来学习。看到IOS的代码风格和布局就别扭的不行,跟java代码和android布局比较显得不是那么方便,所以一直到现在。...

京一 ⋅ 今天 ⋅ 0

浅谈OpenDaylight的二次开发

OpenDaylight作为一款开源SDN网络控制器,依托于强大的社区支持以及功能特性,成为了目前主流的SDN网络控制器开发平台。在比较稳定的OpenDaylight Helium版本中,已经为开发者提供了大量的网...

wangxuwei ⋅ 今天 ⋅ 0

API 开发中可选择传递 token 接口遇到的一个坑

在做 API 开发时,不可避免会涉及到登录验证,我使用的是jwt-auth 在登录中会经常遇到一个token过期的问题,在config/jwt.php默认设置中,这个过期时间是一个小时,不过为了安全也可以设置更...

等月人 ⋅ 今天 ⋅ 0

Java NIO之文件处理

程序要操作本地操作系统的一个文件,可以分为以下三个部分: 对文件位置的操作 对文件的操作 对文件内容的操作 其中,对文件内容的操作在 Java NIO之Channel 中已经有了介绍,通过FileChann...

士别三日 ⋅ 今天 ⋅ 0

Maven的pom.xml配置文件详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.......

小海bug ⋅ 今天 ⋅ 0

解决httpclient超时设置不生效的问题

最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: [java] view plain copy //超时设置 RequestConfig re...

Mr_Tea伯奕 ⋅ 今天 ⋅ 0

过滤器Filter和拦截器HandlerInterceptor

过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要...

hutaishi ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部