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打包 

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

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

Spring Boot 实现RESTful webservice服务端实例的更多相关文章

  1. Spring Boot 实现RESTful webservice服务端示例

    1.Spring Boot configurations application.yml spring: profiles: active: dev mvc: favicon: enabled: fa ...

  2. CXF+Spring+Hibernate实现RESTful webservice服务端实例

    1.RESTful API接口定义 /* * Copyright 2016-2017 WitPool.org All Rights Reserved. * * You may not use this ...

  3. Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

    假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的 ...

  4. Spring Boot开发RESTful接⼝服务及单元测试

    Spring Boot开发RESTful接⼝服务及单元测试 常用注解解释说明: @Controller :修饰class,⽤来创建处理http请求的对象 @RestController :Spring ...

  5. Spring Boot+CXF搭建WebService服务参考资料

    pom.xml文件引入包: <!--WerbService CXF依赖--> <dependency> <groupId>org.apache.cxf</gr ...

  6. Spring Boot+CXF搭建WebService(转)

    概述 最近项目用到在Spring boot下搭建WebService服务,对Java语言下的WebService了解甚少,而今抽个时间查阅资料整理下Spring Boot结合CXF打架WebServi ...

  7. Springboot监控之二:Spring Boot Admin对Springboot服务进行监控

    概述 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控,比如 jvm 监控.类加载.健 ...

  8. Spring Boot+CXF搭建WebService

    Spring Boot WebService开发 需要依赖Maven的Pom清单 <?xml version="1.0" encoding="UTF-8" ...

  9. DelphiXE7中创建WebService(服务端+客户端)

    相关资料: http://www.2ccc.com/news/Html/?1507.html http://www.dfwlt.com/forum.php?mod=viewthread&tid ...

随机推荐

  1. Caffe上用SSD训练和测试自己的数据

        学习caffe第一天,用SSD上上手. 我的根目录$caffe_root为/home/gpu/ljy/caffe    一.运行SSD示例代码    1.到https://github.com ...

  2. [django]django配合前端vue前后端联调,django服务端解决跨域(django-cors-headers)

    django内部csrf post提交数据解决 https://www.cnblogs.com/iiiiiher/articles/9164940.html 前端写了个页面,里面$.post发现403 ...

  3. extjs model store学习笔记

    http://docs.sencha.com/extjs/6.2.0/guides/core_concepts/data_package.html // 定义一个ModelExt.define('My ...

  4. 开启Laravel之旅的标准姿势

    1.github下载最新的laravel https://github.com/laravel/laravel 2.下载到本地,改名,composer install,安装项目的依赖包 compose ...

  5. 解放你生产力的10款效率工具,赶紧mark起来

    聪明的人总是善用工具 社会的快度发展赋予我们的一个幸运之处在于:你可以通过读书或使用工具去改善自身的处境甚至是阶层. 在父母那个时代,通过熟练使用办公软件,可以使一个在水泥地做帮工的青年走进格子间.而 ...

  6. node微信公众号开发---自动回复

    微信开发的特点:1.post请求 (一定要注意,这里和配置域名的时候不一样,配置域名是get请求)2.数据包是xml格式的3.你给微信返回的数据也是xml格式的 var parseString = r ...

  7. 利用Tensorflow实现神经网络模型

    首先看一下神经网络模型,一个比较简单的两层神经. 代码如下: # 定义参数 n_hidden_1 = 256 #第一层神经元 n_hidden_2 = 128 #第二层神经元 n_input = 78 ...

  8. !! MACD战法总结

    我现在只发技术,不预测大盘.其实说实话,大盘不用预测,只要按照guoweijohn战法,有买入信号就入,有卖出信号就出..你也会成为股神..不是吹牛,且听慢慢分解 股市有三种市场: 一.牛市 二.震荡 ...

  9. Mybatis时间段比较

    在开始时间和结束时间内的一段时间范围的查询 <if test="timeStart != null and timeStart != ''"> and wfsj > ...

  10. Cf Round #403 B. The Meeting Place Cannot Be Changed(二分答案)

    The Meeting Place Cannot Be Changed 我发现我最近越来越zz了,md 连调程序都不会了,首先要有想法,之后输出如果和期望的不一样就从输入开始一步一步地调啊,tmd现在 ...