Spring Boot implements RESTful webservice server example

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      : [email protected]
 * @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());

        // class method
        log.info("WIT: REST CLASS={}", jp.getSignature().getDeclaringTypeName() + "." + jp.getSignature().getName());

        // parameters
        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      : [email protected]
 * @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. Code download, compilation and packaging For code download, please visit witpool/Wit-Neptune
on GitHub to import project files, compile and package as follows: Eclipse import maven project


Import Maven project

Maven packaging
Maven install package

Generated JAR package

8. Startup and UT steps
Start the application: java -jar wit-rest-1.0.jar
start the app

UT steps:
(1). Download Wisdom RESTClient
(2). Double-click the JAR package restclient-1.1.jar to start the tool and
import the test case file :
WisdomTool RESTClient

For more help with Wisdom REST Client, please refer to the blog.

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325473123&siteId=291194637