• 简单的get/post服务实现方式


      项目中需要发布一个简单的接口,可以用前期提到的dubbo+rest框架来实现,但当功能需求不大时,可以使用一些简单的方式来提供服务。本篇持续更新,不断积累遇到的一些新的发布方法。

    • Jersey

      先来一个官网的地址:https://jersey.java.net/documentation/latest/。这里只是简单尝试它的服务提供方式,给出GET/POST的服务发布实例。后期再对其进行深入学习并总结。

            <!-- https://mvnrepository.com/artifact/asm/asm -->
            <dependency>
                <groupId>asm</groupId>
                <artifactId>asm</artifactId>
                <version>3.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-client</artifactId>
                <version>1.17.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-server -->
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-server</artifactId>
                <version>1.17.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
                <version>1.17.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-servlet -->
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-servlet</artifactId>
                <version>1.17.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.ws.rs/jsr311-api -->
            <dependency>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
                <version>1.1.1</version>
            </dependency>

      从它的依赖中可以看到,Jersey提供了专门的服务器端与客户端的依赖,实际上,它的核心也就是核心服务器,核心客户端以及集成。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.5"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
        <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        </a>
        <display-name>RESTfulWS</display-name>
        <servlet>
            <servlet-name>Jersey REST Service</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.changhong.test</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Jersey REST Service</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>

      注意初始化参数中的包名。

      提供服务的类中:

    @Path("recommend")
    public class Recommend {
    
        private static Logger log = LoggerFactory.getLogger(Recommend.class);
    
        @GET
        @Path("/together/{json}")
        @Produces(MediaType.TEXT_XML)
        public String userName(@PathParam("json") String i) {
            ......  
        }
    }

      这里给出的GET也可以换成POST,但此配置下参数{json}都只能在url中进行提交,对于简单的业务,可以采用该种方式。但如果需要传入更为复杂的参数,如json等,就需要其它的配置。

    • spring MVC

      这里也只是给出几个实例,以及配置方法,其原理有待深入学习。

      首先给出实际工程中,所用到的依赖:

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.8.3</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.3</version>
            </dependency>

      其次是/WEB-INF/目录下的一些配置文件

      web.xml

    <?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" xmlns:web="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"
        version="3.0">
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <display-name>ChiqAlgTest</display-name>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath*:applicationContext.xml
            </param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>springServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>
    </web-app>

      spring-mvc.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" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
            http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
        <!-- 自动扫描且只扫描@Controller -->
        <context:component-scan base-package="com.algo.test.controller"
            use-default-filters="false">
            <context:include-filter type="annotation"
                expression="org.springframework.stereotype.Controller" />
        </context:component-scan>
    
        <mvc:annotation-driven />
    
        <!-- 将无法mapping到Controller的path交给default servlet handler处理 -->
        <mvc:default-servlet-handler />
        <!-- 定义JSP文件的位置 -->
        <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/" />
            <property name="suffix" value=".jsp" />
        </bean>
        <mvc:resources location="/css/**" mapping="/css/**" />
        <mvc:default-servlet-handler />
        <!-- 支持response的body的json数据格式转换 begin -->
        <bean
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <ref bean="mappingJacksonHttpMessageConverter" />
                </list>
            </property>
        </bean>
        <bean id="mappingJacksonHttpMessageConverter"
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
        <!-- end -->
        <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
        <bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="UTF-8" />
            <!-- 指定所上传文件的总大小不能超过00。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
            <property name="maxUploadSize" value="20000000" />
        </bean>
    </beans>

      发布服务的类中设置相关注解,对请求路径,方式与传入参数进行限制:

      get/传入String

    @RestController
    @RequestMapping("/recommend")
    public class RestDemo {
        @GetMapping("/together/{param}")
        public JSONObject getData(@PathVariable("param") String i) {
            ...
        }
    }

      post/传入String

    @RestController
    @RequestMapping("/recommend")
    public class RestDemo {
        @PostMapping("/together")
        public JSONObject getData(@RequestBody String i) {
        }
    }

      post/传入json并转化为bean

    @RestController 
    @RequestMapping("/recommend")
    public class RestDemo {

    @PostMapping("/togetherJson") public String getData(@RequestBody Message msg) { return msg.toString(); }
    }

      给出最后一个请求的结果:

    url:http://localhost:8080/ChiqAlgTest/recommend/togetherJson
    body:{"mac":"123"}
    response:Message [mac=123, p_bid=null, liv_pty=null, vid_pty=null, rule_view=null, param_view=null, fmt=null, rule=null]
  • 相关阅读:
    (转)Xargs用法详解
    (转)运维老鸟教你安装centos6.5如何选择安装包
    (转)正则表达式与三剑客的使用技巧
    php OAuth服务端编写
    前端工程精粹(一):静态资源版本更新与缓存
    静态资源打包:一个javescript 的src引用多个文件,一个link引用多个CSS文件
    ie,cookie,域名与下划线
    HTML中css和js链接中的版本号
    PHP 优化详解
    jqury插件编写
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/6006450.html
Copyright © 2020-2023  润新知