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工程

Maven打包 
Maven install打包

生成的JAR包

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

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

原文链接:http://geek.csdn.net/news/detail/244296

阅读全文
1 0