常用接口
HandlerMethodArgumentResolver
作用: 用于解析调用Controller层方法的参数
1 2 3 4 5 6 7 8 9 10 11 12
| public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
@Nullable Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception; }
|
常用实现类
- ServletRequestMethodArgumentResolver / ServletResponseMethodArgumentResolver
自动绑定 HttpServletRequest 和 HttpServletResponse
- RequestParamMapMethodArgumentResolver
处理被 @RequestParam 修饰的参数
- RequestHeaderMapMethodArgumentResolver
处理被 @RequestHeader 修饰的参数
- PathVariableMapMethodArgumentResolver
处理被 @PathVariable 修饰的参数
- ModelAttributeMethodProcessor
处理被 @ModelAttribute 修饰的参数
- RequestResponseBodyMethodProcessor
处理被 @RequestBody 修饰的参数
HandlerMethodReturnValueHandler
作用: 处理处理器执行后的返回值,主要有三个功能:
- 1、将相应的参数添加到model中
- 2、设置view
- 3、如果请求已经处理完, 则设置 ModelAndViewContainer 的 requestHandled 为 true
1 2 3 4 5 6 7 8 9 10 11 12 13
| public interface HandlerMethodReturnValueHandler {
boolean supportsReturnType(MethodParameter returnType);
void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception; }
|
- ModelAttributeMethodProcessor
处理被 @ModelAttribute 修饰的方法
- RequestResponseBodyMethodProcessor
处理被 @RequestBody 修饰的方法
- ViewMethodReturnValueHandler
处理View类型返回值,如果是 redirect 类型则设置 mavContainer 的 redirectModelScenario
HttpMessageConverter
作用: 转换HTTP请求体和响应体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public interface HttpMessageConverter<T> {
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}
|
常用实现类
- ByteArrayHttpMessageConverter
- StringHttpMessageConverter
- ResourceHttpMessageConverter
- SourceHttpMessageConverter
- AllEncompassingFormHttpMessageConverter
- Jaxb2RootElementHttpMessageConverter
- MappingJackson2HttpMessageConverter
HandlerInterceptor
作用: Controller 层调用拦截器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; }
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { }
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }
|
常用实现类
- AbstractHandlerMapping.CorsInterceptor
处理跨域请求
- UserRoleAuthorizationInterceptor
检查当前用户的授权情况
常用注解
ControllerAdvice
作用:此注解的Controller是一个增强的Controller,主要有三个功能
– 全局异常处理
– 全局数据绑定
– 全局数据预处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| @ControllerAdvice public class ControllerAdviceController { @ExceptionHandler(Exception.class) public ModelAndView customerException(Exception e) { ModelAndView mv = new ModelAndView(); mv.addObject("message", e.getMessage()); mv.setViewName("myerror"); return mv; } @ModelAttribute(name = "mock") public Map<String, Object> mockData() { HashMap<String, Object> map = new HashMap<>(); map.put("age", 99); map.put("sex", "man"); return map; } @InitBinder("field") public void defaultPrefix(WebDataBinder binder) { binder.setFieldDefaultPrefix("field."); } }
|
ExceptionHandler
作用: 用于处理异常的注解。@ExceptionHandler是一个用于处理控制器中出现的异常的注解。它可以用于方法级别,用于指定处理控制器中出现的异常的方式。