# RestService使用说明

# @restService注解

restService注解可以理解为controller层,其实际也是controller的作用,只是不返回页面,只返回json数据

具体使用见如下:该注解只能在类的顶部进行使用,

  • 如果想返回的数据是json格式

    @RestService
    public class BaseRestServiceTest{ 	
        @RequestMapping("/demo")
        public ResultBean demo(){
            return new ResultBean();
        }
    }
    
  • 如下是返回一个hello页面

    @RestService
    public class BaseRestServiceTest {
    
        @RequestMapping("/")
        public void index(HttpServletResponse response) throws IOException {
            PrintWriter out = response.getWriter();
            out.write("<html>");
            out.write("<h1>Hello World,Welcome to Ts!!!</h1>\n");
            out.write("</html>");
            out.flush();
            out.close();
        }
     }
    
  • 当前类部分方法返回json,部分方法返回页面,此种方法不建议使用

    //注意这里不再是RestService
    @Controller 
    public class BaseRestServiceTest{
        
        //返回index界面,具体后缀根据springboot的配置文件进行读取
        @RequestMapping("/")
        public String index(){
            return "index";
        }
        
        //返回resultBean的json数据
        @RequestMapping("/demo")
        @ResponseBody
        public ResultBean demo(){
            return new ResultBean();
        }
    }
    
    
  • 映射基础路径,只要进行相应的设置值即可,使用方法和RequestMapping一样

    //该类指定,http请求映射的路径在/user下,里面的方法映射为/user/*,只能使用post方法进行请求,并且请求格式为json格式
    @RestService(value = "/user",method = RequestMethod.POST,produces = "application/json")
    public class BaseRestServiceTest{}
    
    

Tip:建议方法名和映射的路径保持一致

# ITAHandlerInterceptor

ITAHandlerInterceptor是所有拦截器的基础类,所有框架自定义拦截器都要实现该类,如果有相应的业务操作,可重写相应的方法进行逻辑书写,该类提供的可重写的方法有:

ITAHandlerInterceptor.png

# 自定义拦截器与配置

使用步骤:

  1. 实现ITAHandlerInterceptor

    public class DemoInterceptor implements ITAHandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request,
                                 HttpServletResponse response, Object handler) throws Exception {
           //TODO sth
            return true;
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    		//TODO sth
        }
    }
    
  2. 配置拦截规则

    InterceptorRegistryaddInterceptors方法中进行配置,具体的拦截方案可参考springboot的相关资料: mvc-config-interceptors (opens new window)

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new DemoInterceptor()).addPathPatterns("/**");
    }
    

# BaseRestService使用

BaseRestService实现了IBaseRestService接口,所有restService类必须继承BaseRestService,或自行创建一个baseRestService eg:userBaseRestService继承BaseRestService,其他继承userBaseRestService来进行扩展,目前提供的方法有如下,具体详情参考BaseRestService:

BaseRestService.png

实例demo:

@RestService
public class DemoRestService extends BaseRestService{
    
    @RequestMapping("/")
    public ResultBean index(){
        setData("field1", "aaaa");
        setData("field2", "vvvv");
        setError("500","server internal error");
        setErrors(new String[]{"server inter err","there is a big err"});
        return result();
    }
}

# 自定义应用异常拦截器

应用拦截器可以对系统中抛出的异常进行捕获处理,并进行相应的记录同时返回给用户可以理解的信息,是整个应用中比较核心的部分

实例demo:

/**
 * 应用拦截器,对抛出的异常进行拦截处理
 */
@ControllerAdvice
public class DemoRestServiceExceptionInterceptor extends BaseRestService {
    private static final Logger logger = LoggerFactory.getLogger(RestServiceExceptionInterceptor.class);
	
    @ExceptionHandler(value = OtherException.class)
    @ResponseBody
    public ResultBean exceptionHandler(HttpServletRequest request,
                                       HttpServletResponse response,
                                       HandlerMethod handlerMethod,
                                       OtherException otheeException,
                                       Model model) {
        //TODO sth
        return result();
    }

	
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResultBean exceptionHandler(HttpServletRequest request,
                                       HttpServletResponse response,
                                       HandlerMethod handlerMethod,
                                       Exception exception,
                                       Model model) {
      	//TODO sth
        return result();
    }
}
最后更新日期: 8/13/2020, 8:14:33 AM