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打包
8.启动和UT步骤
启动应用:java -jar wit-rest-1.0.jar
UT步骤:
(1). 下载WisdomTool REST Client
(2). 双击 JAR包 restclient-1.1.jar 启动工具
导入测试用例文件:
关于WisdomTool REST Client更多的使用帮助,请参考GitHub wisdomtool/rest-client
总结
以上所述是小编给大家介绍的Spring Boot 实现Restful webservice服务端示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
ComplexTypeService是一个WebService类,该类的代码如下: import java.io.FileOutputStream; import data.DataForm; public class ComplexTypeService{ // 上传图像,imageByte参数表示上传图像文件的字节, // length参数表示图像文件的字节长度(该参数
本文向大家介绍django-crontab实现服务端的定时任务的示例代码,包括了django-crontab实现服务端的定时任务的示例代码的使用技巧和注意事项,需要的朋友参考一下 安装 在Django项目中使用 settings.py 配置任务 官方demo 上述demo参数说明 参数1:定时 例如47 11 * * * 表示每天的11时47分执行 参数2:方法的python模块路径,如果执行d
本文向大家介绍java实现memcache服务器的示例代码,包括了java实现memcache服务器的示例代码的使用技巧和注意事项,需要的朋友参考一下 什么是Memcache? Memcache集群环境下缓存解决方案 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说
本文向大家介绍ThinkPHP整合datatables实现服务端分页的示例代码,包括了ThinkPHP整合datatables实现服务端分页的示例代码的使用技巧和注意事项,需要的朋友参考一下 最近做东西有一个需求,因为数据量很大,在这里我决定使用datatables的服务端分页,同时还需要传递查询条件到服务端。在网上搜索的大部分文章都感觉有些误差,于是自己封装了一下,主要配置/工具为: 服务端:p
本文向大家介绍SpringBoot的服务注册与发现示例,包括了SpringBoot的服务注册与发现示例的使用技巧和注意事项,需要的朋友参考一下 微服务 实践“微服务”自然要学习如何做服务注册与发现 基于SpringBoot来进行微服务的学习,自然选择了与之息息相关的SpringCloud;当然可以选择其他的技术进行,比如dubbo 也可以用zookeeper来实现服务注册与发现,至于zookeep
本文向大家介绍go语言实现聊天服务器的示例代码,包括了go语言实现聊天服务器的示例代码的使用技巧和注意事项,需要的朋友参考一下 看了两天 go 语言,是时候练练手了。 go 的 routine(例程) 和 chan(通道) 简直是神器,实现多线程(在 go 里准确的来说是 多例程)简直不要太轻松。 于是动手码了一个傻瓜版的黑框聊天器。 server 端: 监听 TCP 连接;支持自定义客户端命令;