在spring中使用webservice(Restful风格)

我们一般都会用webservice来做远程调用,大概有两种方式,其中一种方式rest风格的简单明了。

记录下来作为笔记:

开发服务端:

具体的语法就不讲什么了,这个网上太多了,而且只要看一下代码基本上都懂,下面是直接贴代码:

package com.web.webservice.rs;

import java.util.Iterator;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.google.common.collect.Lists;
import com.web.module.index.model.dao.UserDao;
import com.web.module.index.model.entity.User;

/**
 *
 * @author Hotusm
 *
 */
@Path("/test")
public class UserService {

    private static final Logger logger=LoggerFactory.getLogger(UserService.class);

    public static final String APPLICATION_XML_UTF_8 = "application/xml; charset=UTF-8";
    @Autowired
    private UserDao userDao;

    /**
     *
     * @Produces 表示返回的数据格式
     * @Consumes 表示接受的格式类型
     * @GET 表示请求的类型
     * @return
     *
     * <a href="http://www.ibm.com/developerworks/cn/web/wa-jaxrs/"> BLOG</a>
     */
    @GET
    @Path("/list")
    @Produces("application/json")
    public List<User> list(){
        List<User> users=Lists.newArrayList();
        Iterable<User> iters = userDao.findAll();
        Iterator<User> iterator = iters.iterator();
        while(iterator.hasNext()){
            users.add(iterator.next());
        }

        return users;
    }

    /**
     *
     * 在网页上显示链接
     * @return
     */
    @GET
    @Path("/page")
    @Produces("text/html")
    public String page(){

        return "<a href=‘http://www.baidu.com‘>百度</a>";
    }

}

这个风格和springmvc实在太像了,所以一看基本上就懂了。

下面是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">

        <import resource="classpath*:META-INF/cxf/cxf.xml" />
        <import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" />  

        <jaxrs:server id="rsService" address="/jaxrs">      <!--在其中可以添加一些配置,比如拦截器等等的-->
            <jaxrs:serviceBeans>
                <ref bean="iuserService"/>
            </jaxrs:serviceBeans>
            <jaxrs:providers>
                <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
            </jaxrs:providers>
        </jaxrs:server>

        <bean id="iuserService" class="com.web.webservice.rs.UserService"></bean>

</beans>

写好这些之后,启动发现并不能够使用,这是因为我们还需要在web.xml中配置发现ws:

web.xml

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <!-- 这样设置在rs下面才能看到ws的界面,所以的服务都在这个后面 -->
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/rs/*</url-pattern>
    </servlet-mapping>

注意我们现在这样做以后,我们只要输入$ctx/rs那么下面所以的ws服务都能看到了。

其实使用spring的话,是非常的简单的。我们只需要配置一下上面的文件,最难的还是逻辑部分。

开发ws的服务端:

1:配置xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">  <!--设置一些属性,具体的可以看源码-->
        <property name="requestFactory">
            <bean class="org.springframework.http.client.SimpleClientHttpRequestFactory">
                <property name="readTimeout" value="30000"/>
            </bean>
        </property>
    </bean>

</beans>

配置好了客户端的配置文件以后,我们就可以直接将restTemplate注入到我们需要使用的地方中去,这个类是spring帮我抽象出来的,里面有很多方法供我们的使用,其实就是封装了一层,如果不喜欢,完成可以自己封装一个,然后注入:

源码:

protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback,
            ResponseExtractor<T> responseExtractor) throws RestClientException {

        Assert.notNull(url, "‘url‘ must not be null");
        Assert.notNull(method, "‘method‘ must not be null");
        ClientHttpResponse response = null;
        try {
            ClientHttpRequest request = createRequest(url, method);
            if (requestCallback != null) {
                requestCallback.doWithRequest(request);
            }
            response = request.execute();
            if (!getErrorHandler().hasError(response)) {
                logResponseStatus(method, url, response);
            }
            else {
                handleResponseError(method, url, response);
            }
            if (responseExtractor != null) {
                return responseExtractor.extractData(response);
            }
            else {
                return null;
            }
        }
        catch (IOException ex) {
            throw new ResourceAccessException("I/O error on " + method.name() +
                    " request for \"" + url + "\":" + ex.getMessage(), ex);
        }
        finally {
            if (response != null) {
                response.close();
            }
        }
    }

下面是一个客户端调用的例子(用的是springtest)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:/spring-context.xml","classpath*:/spring-mq-provider.xml","classpath*:/spring-mq-consumer.xml","classpath*:/spring-jaxrs-service.xml","classpath*:/spring-jaxrs-client.xml"})
public class RestTest {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${rest.service.url}")
    String url;
    @Test
    public void test(){
        //restTemplate=new RestTemplate();
        String str = restTemplate.getForObject(url+"test/list", String.class);

    }
}

基本上这些就能购我们使用了。

下次有空吧soap方法的也总结一下。

时间: 2024-11-20 07:22:36

在spring中使用webservice(Restful风格)的相关文章

Spring中使用WebService

Server端和Client端的Web工程截图: Server代码: package com.wiseweb.bean; public class Order { private int id ; private String name ; private double price ; public Order() { super(); } public Order(int id, String name, double price) { super(); this.id = id; this.

Spring Boot 中 10 行代码构建 RESTful 风格应用

RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 RESTful 提供了很好的支持,常见的相关注解有: @RestController @GetMapping @PutMapping @PostMapping @DeleteMapping @ResponseBody ... 这些注解都是和 RESTful 相关的,在移动互联网中,RESTful 得

SpringMVC实现Restful风格的WebService

1.环境 JDK7 MyEclipse2014 tomcat8 maven 3.3.3 spring4.1.4 2.创建maven工程 使用MyEclipse创建maven工程的方式可以参考这篇博文(链接1), 该博文中的第四小结是关于如何创建SpringMVC+maven教程.下面只给出创建好的目录结构,其中的部分文件如java程序是后面要完成的. 3.指定依赖文件 maven具有特定的文件结构,并通过pom.xml来管理工程.下面是在实现Restful时需要的依赖. 1 <project x

Spring MVC RESTful风格URL welcome-file-list不起作用问题解决

[Spring框架]<mvc:default-servlet-handler/>的作用 优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do . *.xhtml等方式.这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST风格的URL. 如果将DispatcherServlet请求映射配置为"/",

三、Spring MVC之Restful风格的实现

先抛论点:我觉得Restful风格仅仅是一种风格,并不是什么高深的技术架构,而是一种编程的规范.在我们进行应用程序开发的过程中,我们可以发现,80%以上的操作都是增删查改式的操作,restful就是定义了CRUD的开发规范.下面把restful风格的url和传统风格的url进行一个对比. 业务操作 传统风格URL 传统请求方式 restful风格URL restful请求方式 新增 /add GET/POST /order POST 修改 /update?id=1 GET/POST /order

【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html

概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/getUserXML 这样做不符合Restful的原则,1个资源相当于变成了两个资源: 2. 对同一资源的CRUD操作 不推荐的做法: /user/addUser/ /user/getUser/123 /user/deleteUser/123 /user/updateUser/123 这样做也不符合Res

Spring MVC 支持 RESTful 风格编程

1.配置 web.xml <!-- 配置 SpringMVC DispatcherServlet --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置 DispatcherServlet 的一个初始化

基于restful风格的maven项目实践(融合spring)

我们我们经常在老式的项目开发过程中,遇到找java包的问题:甚至有时候一找一天就过去了.maven 是我们开发工程师的福音,它可以根据我们的配置自动的下载并加装到我们的工程中,并在发布的时候同时发布对应的Java包.这样大大提高了我们的工作效率,更有时间学习前沿的技术. 什么是maven? maven是专用于进行项目的配置管理工作:用maven创建的项目中必须包括一个pom.xml文件,用于设置依赖关系.项目的基本配置(grouId,artifactId,version等),编译项目时用插件.环

springboot集成spring security实现restful风格的登录认证 附代码

一.文章简介 本文简要介绍了spring security的基本原理和实现,并基于springboot整合了spring security实现了基于数据库管理的用户的登录和登出,登录过程实现了验证码的校验功能. 完整代码地址:https://github.com/Dreamshf/spring-security.git 二.spring security框架简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.主要包括:用户认证