一个基于Spring Boot的API、RESTful API项目种子(骨架)

2021-06-21 20:06

阅读:511

  • 响应结果生成工具
    */
    public class ResultGenerator {
    private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";

    public static Result genSucce***esult() {
    return new Result()
    .setCode(ResultCode.SUCCESS)
    .setMessage(DEFAULT_SUCCESS_MESSAGE);
    }

    public static Result genSucce***esult(Object data) {
    return new Result()
    .setCode(ResultCode.SUCCESS)
    .setMessage(DEFAULT_SUCCESS_MESSAGE)
    .setData(data);
    }

    public static Result genFailResult(String message) {
    return new Result()
    .setCode(ResultCode.FAIL)
    .setMessage(message);
    }
    }
    统一异常处理
    public void configureHandlerExceptionResolvers(List exceptionResolvers) {
    exceptionResolvers.add(new HandlerExceptionResolver() {
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) {
    Result result = new Result();
    if (e instanceof ServiceException) {//业务失败的异常,如“账号或密码错误”
    result.setCode(ResultCode.FAIL).setMessage(e.getMessage());
    logger.info(e.getMessage());
    } else if (e instanceof NoHandlerFoundException) {
    result.setCode(ResultCode.NOT_FOUND).setMessage("接口 [" + request.getRequestURI() + "] 不存在");
    } else if (e instanceof ServletException) {
    result.setCode(ResultCode.FAIL).setMessage(e.getMessage());
    } else {
    result.setCode(ResultCode.INTERNAL_SERVER_ERROR).setMessage("接口 [" + request.getRequestURI() + "] 内部错误,请联系管理员");
    String message;
    if (handler instanceof HandlerMethod) {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    message = String.format("接口 [%s] 出现异常,方法:%s.%s,异常摘要:%s",
    request.getRequestURI(),
    handlerMethod.getBean().getClass().getName(),
    handlerMethod.getMethod().getName(),
    e.getMessage());
    } else {
    message = e.getMessage();
    }
    logger.error(message, e);
    }
    responseResult(response, result);
    return new ModelAndView();
    }

    });

    }
    常用基础方法抽象封装
    public interface Service {
    void save(T model);//持久化
    void save(List models);//批量持久化
    void deleteById(Integer id);//通过主鍵刪除
    void deleteByIds(String ids);//批量刪除 eg:ids -> “1,2,3,4”
    void update(T model);//更新
    T findById(Integer id);//通过ID查找
    T findBy(String fieldName, Object value) throws TooManyResultsException; //通过Model中某个成员变量名称(非数据表中column的名称)查找,value需符合unique约束
    List findByIds(String ids);//通过多个ID查找//eg:ids -> “1,2,3,4”
    List findByCondition(Condition condition);//根据条件查找
    List findAll();//获取所有
    }
    提供代码生成器来生成基础代码
    public abstract class CodeGenerator {
    ...
    public static void main(String[] args) {
    genCode("输入表名");
    }
    public static void genCode(String... tableNames) {
    for (String tableName : tableNames) {
    //根据需求生成,不需要的注掉,模板有问题的话可以自己修改。
    genModelAndMapper(tableName);
    genService(tableName);
    genController(tableName);
    }
    }
    ...
    }
    CodeGenerator 可根据表名生成对应的Model、Mapper、MapperXML、Service、ServiceImpl、Controller(默认提供POST和RESTful两套Controller模板,根据需要在 genController(tableName)方法中自己选择,默认是纯POST的),代码模板可根据实际项目的需求来定制,以便渐少重复劳动。由于每个公司业务都不太一样,所以只提供了一些简单的通用方法模板,主要是提供一个思路来减少重复代码的编写。在我们公司的实际使用中,其实根据业务的抽象编写了大量的代码模板。


  • 评论


    亲,登录后才可以留言!