Spring Boot 实现RESTful webservice服务端示例
来源:互联网 发布:阿里云1mbps实际网速 编辑:程序博客网 时间:2024/06/05 06:33
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 */@SpringBootApplicationpublic 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@Componentpublic 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 */@ControllerAdvicepublic 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). 下载WisdomTool REST Client
(2). 双击 JAR包 restclient-1.1.jar 启动工具
导入测试用例文件:
原文链接:http://geek.csdn.net/news/detail/244296
阅读全文
1 0
- Spring Boot实现RESTful webservice服务端示例
- Spring Boot 实现RESTful webservice服务端示例
- spring boot 实现Restful API
- spring + springmvc + cxf 实现webservice restful
- spring整合cxf实现restful webservice
- webservice结合spring实现restful风格
- Spring Boot系列 - 6. spring boot 实现Restful API
- cxf依赖spring 方式实现webservice服务端
- Spring Webservice服务端及客户端实现
- spring boot security oauth2 jwt 服务端实现
- Spring Boot示例 - 1. 使用Spring Boot Actuator构建RESTful web service
- Spring +restful 构造webservice
- Spring +restful 构造webservice
- Spring Boot+Spring Security+JWT 实现 RESTful Api 权限控制
- Spring Restful 风格示例
- 基于spring实现的restful webservice返回json数据
- 用Spring+cxf 实现一个简单的restful webService
- 使用CXF与Spring集成实现RESTFul WebService
- 【示例教程】如何通过leadtools读取二维码中的中文
- View编程指南1—Windows 和 Views 简介
- 77秒小程序系统开发详解
- 一种基于reSIProcate的gb28181接入系统架构设计
- 奇怪了,ADD方法会少插入字段?
- Spring Boot 实现RESTful webservice服务端示例
- intel产品规格查询网址
- 4. ROS编程入门--PID控制器
- Angular问题笔记
- fdisk 命令——linux增加磁盘,分区、格式、挂载
- 初来乍到,请多指教
- win10家庭版没有组策略怎么办?
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 关于label标签自身点击事件触发的影响和使用方式