• Spring Boot 实现RESTful webservice服务端实例


    1.Spring Boot configurations 
    application.yml

    spring:
      profiles:
        active: dev
      mvc:
        favicon:
          enabled: false
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/wit_neptune?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
        username: root
        password: 123456
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
    

    2.Spring Boot Application 
    WitApp.java

    /* 
     * Copyright 2016-2017 WitPool.org All Rights Reserved.
     * 
     * You may not use this file except in compliance with the License.
     * A copy of the License is located at
    
     *  http://www.witpool.org/licenses
     * 
     * or in the "license" file accompanying this file. This file is distributed
     * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     * express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
    package org.witpool;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /** 
     * @ClassName: WitApp 
     * @Description: WitPool Application  
     * @author Dom Wang 
     * @date 2017-11-15 AM 11:21:55 
     * @version 1.0 
     */
    @SpringBootApplication
    public class WitApp
    {
    
        public static void main(String[] args)
        {
            SpringApplication.run(WitApp.class, args);
        }
    }
    

    3.Rest Controller 
    WitUserRest.java

    /* 
     * Copyright 2016-2017 WitPool.org All Rights Reserved.
     * 
     * You may not use this file except in compliance with the License.
     * A copy of the License is located at
    
     *  http://www.witpool.org/licenses
     * 
     * or in the "license" file accompanying this file. This file is distributed
     * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     * express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
    package org.witpool.rest;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.DeleteMapping;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.PutMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.witpool.common.enums.WitCode;
    import org.witpool.common.model.bean.WitResult;
    import org.witpool.common.model.po.WitUser;
    import org.witpool.common.util.WitUtil;
    import org.witpool.persist.WitRepository;
    import org.witpool.service.WitService;
    
    /**
     * @Class Name : WitUserRest
     * @Description: WitPool User Rest
     * @Author     : Dom Wang
     * @Email      : witpool@outlook.com 
     * @Date       : 2017-11-15 PM 2:50:27 
     * @Version    : 1.0
     */
    @RestController
    @RequestMapping("/users")
    public class WitUserRest
    {
        private final static Logger log = LoggerFactory.getLogger(WitUserRest.class);
    
        @Autowired
        private WitRepository reposit;
    
        @Autowired
        private WitService service;
    
        /**
        * 
        * @Title: addUser 
        * @Description: Add one user 
        * @param @param user
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @PostMapping
        public WitResult<WitUser> addUser(@RequestBody WitUser user)
        {
            return WitUtil.success(reposit.save(user));
        }
    
        /**
        * 
        * @Title: addUsers 
        * @Description: Add users by specified number
        * @param @param num
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @PostMapping(value = "/{number}")
        public WitResult<WitUser> addUsers(@PathVariable("number") Integer num)
        {
            if (num < 0 || num > 10)
            {
                log.error("The number should be [0, 10]");
                return WitUtil.failure(WitCode.WIT_ERR_INVALID_PARAM);
            }
            return WitUtil.success(service.addUsers(num));
        }
    
        /**
        * 
        * @Title: updateUser 
        * @Description: Update user 
        * @param @param user
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @PutMapping
        public WitResult<WitUser> updateUser(@RequestBody WitUser user)
        {
            return WitUtil.success(reposit.save(user));
        }
    
        /**
        * 
        * @Title: deleteUser 
        * @Description: delete user by ID 
        * @param @param userId
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @DeleteMapping(value = "/{userId}")
        public WitResult<WitUser> deleteUser(@PathVariable("userId") Integer userId)
        {
            reposit.delete(userId);
            return WitUtil.success();
        }
    
        /**
        * 
        * @Title: getUserByID 
        * @Description: Get user by ID 
        * @param @param userId
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @GetMapping(value = "/{userId}")
        public WitResult<WitUser> getUserByID(@PathVariable("userId") Integer userId)
        {
            return WitUtil.success(reposit.findOne(userId));
        }
    
        /**
        * 
        * @Title: getUserByName 
        * @Description: Get user by name 
        * @param @param userName
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @GetMapping(value = "/name/{userName}")
        public WitResult<WitUser> getUserByName(@PathVariable("userName") String userName)
        {
            return WitUtil.success(reposit.findByUserName(userName));
        }
    
        /**
        * 
        * @Title: getUsers 
        * @Description: Get all users 
        * @param @return 
        * @return WitResult<WitUser>
        * @throws
         */
        @GetMapping
        public WitResult<WitUser> getUsers()
        {
            return WitUtil.success(reposit.findAll());
        }
    }
    

    4.Aspect 
    WitAspect.java

    /* 
     * Copyright 2016-2017 WitPool.org All Rights Reserved.
     * 
     * You may not use this file except in compliance with the License.
     * A copy of the License is located at
    
     *  http://www.witpool.org/licenses
     * 
     * or in the "license" file accompanying this file. This file is distributed
     * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     * express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
    package org.witpool.common.aspect;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    /** 
     * @ClassName: WitAspect 
     * @Description: WitPool Http Aspect 
     * @author Dom Wang 
     * @date 2017-11-15 PM 3:36:38 
     * @version 1.0 
     */
    @Aspect
    @Component
    public class WitAspect 
    {
        private final static Logger log = LoggerFactory.getLogger(WitAspect.class);
    
        @Pointcut("execution(public * org.witpool.rest.WitUserRest.*(..))")
        public void log()
        {
        }
    
        @Before("log()")
        public void doBefore(JoinPoint jp)
        {
            ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest req = attr.getRequest();
    
            // URL
            log.info("WIT: URL={}", req.getRequestURL());
    
            // Method
            log.info("WIT: HTTP Method={}", req.getMethod());
    
            // IP
            log.info("WIT: IP={}", req.getRemoteAddr());
    
            // 类方法
            log.info("WIT: REST CLASS={}", jp.getSignature().getDeclaringTypeName() + "." + jp.getSignature().getName());
    
            // 参数
            log.info("WIT: ARGS={}", jp.getArgs());
        }
    
        @After("log()")
        public void doAfter()
        {
            log.info("WIT: do after");
        }
    
        @AfterReturning(returning = "obj", pointcut = "log()")
        public void doAfterReturning(Object obj)
        {
            log.info("WIT: RESPONSE={}", obj.toString());
        }
    }
    

    5.Controller Advice 
    WitExceptHandle.java

    /* 
     * Copyright 2016-2017 WitPool.org All Rights Reserved.
     * 
     * You may not use this file except in compliance with the License.
     * A copy of the License is located at
    
     *  http://www.witpool.org/licenses
     * 
     * or in the "license" file accompanying this file. This file is distributed
     * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     * express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
    package org.witpool.common.handle;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.witpool.common.enums.WitCode;
    import org.witpool.common.except.WitException;
    import org.witpool.common.model.bean.WitResult;
    
    /** 
     * @class name: WitExceptHandle 
     * @description: WitPool Result 
     * @author Dom Wang 
     * @date 2017-11-15 PM 3:46:14 
     * @version 1.0 
     */
    @ControllerAdvice
    public class WitExceptHandle
    {
        private final static Logger logger = LoggerFactory.getLogger(WitExceptHandle.class);
    
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public WitResult handle(Exception e)
        {
            if (e instanceof WitException)
            {
                WitException we = (WitException) e;
                return new WitResult(we.getCode(), we.getMessage());
            }
            else
            {
                logger.error(WitCode.WIT_ERR_INNER.getMsg() + "{}", e);
                return new WitResult(WitCode.WIT_ERR_INNER.getCode(), e.getMessage());
            }
        }
    }
    

    6.Jpa Repository 
    WitRepository.java

    /* 
     * Copyright 2016-2017 WitPool.org All Rights Reserved.
     * 
     * You may not use this file except in compliance with the License.
     * A copy of the License is located at
    
     *  http://www.witpool.org/licenses
     * 
     * or in the "license" file accompanying this file. This file is distributed
     * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     * express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
    package org.witpool.persist;
    
    import java.util.List;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.witpool.common.model.po.WitUser;
    
    /**
     * @Class Name : WitRepository
     * @Description: WitPool Repository
     * @Author     : Dom Wang
     * @Email      : witpool@outlook.com 
     * @Date       : 2017-11-15 PM 2:50:27 
     * @Version    : 1.0
     */
    public interface WitRepository extends JpaRepository<WitUser, Integer>
    {
        public List<WitUser> findByUserName(String userName);
    }
    

    7.代码下载、编译、打包 

    代码下载请访问 GitHub上的 witpool/Wit-Neptune 
    导入工程文件、编译、打包步骤如下: 
    Eclipse 导入maven工程 
    导入Maven工程

    Maven打包 
    Maven install打包

    生成的JAR包

    8.启动和UT步骤 
    启动应用:java -jar wit-rest-1.0.jar 
    启动应用

    UT步骤: 
    (1). 下载Wisdom REST Client 
    (2). 双击 JAR包 restclient-1.1.jar 启动工具 
    导入测试用例文件: 
    WisdomTool RESTClient

  • 相关阅读:
    nginx 出现413 Request Entity Too Large问题的解决方法
    PHP中的插件机制原理和实例
    PHP扩展开发:第一个扩展
    阿拉伯语在网页中排版问题解决
    Piwik学习 -- 插件开发
    piwik高负载加速之切换session存储位置
    php 函数func_get_args()、func_get_arg()与func_num_args()之间的比较
    Docker: 基础介绍 [一]
    深入剖析Kubernetes学习笔记:开篇词(00)
    网络编程基础【林老师版】:简单的 套接字通信(一)
  • 原文地址:https://www.cnblogs.com/witpool/p/7954460.html
Copyright © 2020-2023  润新知