SpringMVC - Controller中的Handler方法

目录

  • SpringMVC - Controller中handler方法参数签名
    • handler方法返回值
    • handler方法参数签名(666的地方)

SpringMVC - Controller中handler方法参数签名

handler方法返回值

注意:下面的参数签名以及返回值不仅仅可以在@Controller类中的处理请求方法中使用,还可以用于@ExceptionHandler(异常处理的方法中),比如@Controller中的异常处理,或者全局异常处理@ControllerAdvice中

    @RequestMapping(value = {"/method.do"}, method = {RequestMethod.GET, RequestMethod.POST,以及其他})
    public ModelAndView controllerMethod(各种参数...) {
        final ModelAndView view = new ModelAndView(视图名称);
        渲染view .......
        return view;
    }
@ExceptionHandler(value = {Exception.class})
    public void exceptionHandler(HttpServletRequest request, Writer writer, Exception ex) throws IOException {
        writer.write(ex.getMessage());
        //writer.flush();
        //writer.close();
    }
  1. 这是最常见的返回类型 - ModelAndView ,可以进行很多渲染操作;
  2. ModelAndView换成String,则需要返回视图解析器ViewResolver 的配置的视图名;就是ResourceBundleViewResolverXmlViewResolverUrlBasedViewResolver(子类:InternalResourceViewResolver)对应配置的视图名

  
    
    
    
  

  
  
    
    
    
  
  1. 使用**@ResponseBody注解在返回类型上,使得该方法更加灵活,通常都是用于处理Ajax**请求;
 public @ResponseBody ModelAndView controllerMethod(各种参数...) {}
  1. @ResponseBody ModelAndView可以让页面渲染、返回,Ajax就可以实现刷页面的功能,不需要拼接HTML;

  2. @ResponseBody Map,也是通常用于处理Ajax请求, 前端接受到数据,简单的数据类型只需要 function(data){ data.map中的键 };就可以获取到值了。

@RequestMapping(value = {"/login.do"}, method = {RequestMethod.POST})
@ResponseBody public Map controllerMethod(各种参数...) {
	Map json = new HashMap<>();
	json.put("error", "数据不正确!!");
	json.put("success", "成功了!!!");
	return json;
}
  1. @ResponseBody使得返回类型可以为任何其他返回值,前面几个都是非常常见;
  2. handler方法返回值当然也可以是void类型。
  3. @RequestMapping(value = “/method.do”, method = RequestMethod.POST)可以直接换成@PostMapping("/method.do")、
  4. RequestMapping(value = “/method.do”, method = RequestMethod.GET)可以直接换成@GetMapping("/method.do")

handler方法参数签名(666的地方)

@RequestMapping(value = {"/method.do"}, method = {RequestMethod.GET, RequestMethod.POST})
public void controllerMethod(
        WebRequest webRequest,
        NativeWebRequest nativeWebRequest,
        HttpServletRequest request,//常见
        HttpServletResponse response,//常见
        HttpSession session,//常见
        PushBuilder pushBuilder,
        Principal principal,
        HttpMethod method,
        Locale locale,//Java8的time API
        TimeZone timeZone,//Java8的time API
        ZoneId zoneId,//Java8的time API
        InputStream is,
        Reader reader,
        OutputStream os,
        Writer writer,
        HttpEntity httpEntity,
        Errors errors,
        BindingResult result,
        SessionStatus sessionStatus,

        @PathVariable String path,//常见
        @MatrixVariable String matri,
        @RequestParam String username,
        @RequestHeader String header,
        @CookieValue String cookie,
        @RequestBody String body,//常见
        @RequestPart String part,
        @SessionAttribute String valueInSession,
        @RequestAttribute String valueInRequest) {
}

这里需要插播一段引用, http://tomcat.apache.org/whichversion.html
Tomcat版本 - Servlet版本 - JDK版本
SpringMVC - Controller中的Handler方法_第1张图片

  1. Locale localeTimeZone 、timeZoneZoneId zoneId属于Java8的新特性日期时间API,可以获取请求的国家、地区等信息,其实可以通过request获取。使用需要Tomcat对应的版本;
  2. InputStream isReader readerOutputStream osWriter writerHttpEntity httpEntityHttpSession session都可以使用request、response直接获取,或者再包装一下获得;
  3. @PathVariable(value=“path名称”) String path可以获取映射url中的占位符值;
  4. @RequestParam(value=“key名称”) String username可以获取请求参数对应的值;
  5. @RequestHeader(value=“key名称”) String header可以获取请求头key对应的值;
  6. **@RequestAttribute(value=“key名称”)**可以访问先前创建的预先存在的Request属性值;
  7. @SessionAttribute(value=“key名称”) String valueInSession可以访问先前创建的预先存在的Session属性值;
  8. 使用注解的参数一定注意其注解的value值,想修改参数名称则要强制注明value值;
  9. 以上参数不分先后顺序,参数名称,注意参数类型注解类型
  10. Spring有类型自动转换,所以不一定是String、Object类型,你可以根据自己先前设置的值类型,声明参数时直接使用该类型值,如@SessionAttribute(name = “currentUser”) User user就可以获取先前添加到Session中的User对象,不需要再使用(User)request.getSession().getAttribute(“currentUser”)先获取在强转。

你可能感兴趣的:(Java学习日记,Spring,SpringMVC)