开启掘金成长之旅!这是我参与「掘金日新计划 · 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()方法同时使用。