编写控制层要注意的点

82 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情

1)控制层需要传递统一的数据给前端,因此在控制层可以编写一个JsonResult类,来统一响应数据的格式,在JsonResult类中声明存储状态码、错误信息、数据的字段,其中用来存储数据的字段声明为E泛型,根据需要编写构造方法。

2)在业务层抛出的异常一般由控制层进行处理,这需要编写一个基类来统一处理抛出的错误,设置一个static final的常量OK=200作为默认状态码。在基类里创建一个用来处理异常的方法,要使用@ExceptionHandler注解,这个注解里传入要处理的异常的class参数,比如下面示例的异常处理方法将处理ServiceException类型的错误,包括这个类型的子类。使用这个注解后,当前类里面的方法(带有@RequestMapper)抛出ServiceException类型的异常时就会执行handleException方法,这个方法返回一个JsonResult类型的数据给前端。

public class BaseController {
    public static final int OK = 200;
​
    @ExceptionHandler(ServiceException.class)
    public JsonResult<Void> handleException(Throwable e){
        JsonResult<Void> result = new JsonResult<Void>(e);
        if (e instanceof UsernameDuplicateException){
            result.setState(4000);
        }else if(e instanceof InsertException){
            result.setState(5000);
        }else if(e instanceof PasswordNotMatchException){
            result.setState(4001);
        }else if(e instanceof UserNotFoundException){
            result.setState(4002);
        }
        return result;
    }
}

3)些项目时有时候要用到文件上传,用户上传的文件一般就是在控制层进行处理的,当用户请求携带数据来到控制层后直接就在控制层对文件进行处理,保存到文件目录,并记录下文件目录,调用业务层和持久层来对文件目录进行存储,最终将这个目录保存到数据库中。他的实现流程如下:

 SpringMVC实现文件上传主要用到MultipartFile接口,这个接口有几个常用API:

  • String getOriginalFilename():获取用户上传文件的文件名。
  • boolean isEmpty():判断文件是否为空。
  • long getSize():获取文件大小(字节)。
  • String getContentType():获取文件类型(例如jpg格式文件返回image/jpeg).
  • InputStream getInputStream():获取上传文件的输入字节流。
  • void transferTo(File dest):保存上传的文件,该方法不可与getInputStream()方法同时使用。