zoukankan      html  css  js  c++  java
  • Spring MVC异常处理 和 重定向传递数据

    1.异常处理介绍

      Spring在web项目中,如果在请求处理时出现异常,那输出会是Servlet响应。这时异常需要以某种方式转换为响应。

      Spring将异常转换为响应的方式:

        a.特定的Spring异常将自动映射为指定的HTTP状态码;

        b.异常上添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码;

        c.方法上添加@ExceptionHandler注解,使其处理异常。

    2.异常处理代码

    1     @RequestMapping("getPathVariable/{id}")
    2     public String getPathVariable(
    3             @PathVariable("id") String id){
    4         if("error".equals(id)){
    5             throw new SpittleException();
    6         }
    7         return "index";
    8     }
     1 package com.taozhiye.controller;
     2 
     3 import org.springframework.http.HttpStatus;
     4 import org.springframework.web.bind.annotation.ResponseStatus;
     5 
     6 @ResponseStatus(
     7         // 404
     8             value = HttpStatus.NOT_FOUND,
     9             reason = "Spittle not found"
    10         )
    11 public class SpittleException extends RuntimeException {
    12 
    13 }

      正常情况下,当id为error时,会报错,这时是500错误,我们可以通过@ResponseStatus注解,映射到404状态码上,进行简单的异常处理。

      第二种方法是报相应的异常,直接跳转到错误页面。

     1 package com.taozhiye.controller;
     2 
     3 import org.springframework.web.bind.annotation.ControllerAdvice;
     4 import org.springframework.web.bind.annotation.ExceptionHandler;
     5 
     6 
     7 
     8 @ControllerAdvice
     9 public class AppExcepitonHandler {
    10     
    11     @ExceptionHandler(Exception.class)
    12     public String deal(){
    13         System.out.println("出现异常");
    14         return "index";
    15     }
    16 }

    3.重定向传值

     1     @RequestMapping("getPathVariable/{id}")
     2     public String getPathVariable(
     3             @PathVariable("id") String id,
     4             Model model,
     5             RedirectAttributes model2){
     6         if("error".equals(id)){
     7             throw new SpittleException();
     8         }else if("findAll".equals(id)){
     9             /**
    10              * 重定向传参数:
    11              *         相当于把参数写到session中,
    12              *             如果重定向到controller的时候,用@ModelAttribute接收
    13              *             如果重定向到页面,可以直接接收
    14              */
    15             model2.addFlashAttribute("flash", "flash");
    16             /**
    17              * 通过url模板进行重定向
    18              */
    19             return "redirect:/{id}";
    20         }else if("index".equals(id)){
    21 //            model.addAttribute("id", id);
    22             /**
    23              * 转发不可以使用模板
    24              */
    25 //            return "/{id}";
    26             model2.addFlashAttribute("flash", "flash");
    27             /**
    28              * 通过url模板进行重定向
    29              */
    30             return "index";
    31         }else{
    32             return "ajax1";
    33         }
    34     }
    @RequestMapping("/findAll")
        @ResponseBody
        public List<User> findAll(@ModelAttribute("flash") String flash){
            System.out.println("flash:"+flash);
            return userService.findUserAll();
        }
    
    @RequestMapping("/index")
        @ResponseBody
        public List<User> index(Map<String, Object> map,@ModelAttribute("flash")String flash){
            System.out.println("flash:"+flash);
            return userService.findUserAll();
        }
     重定向传参数:
        相当于把参数写到session中,
          如果重定向到controller的时候,用@ModelAttribute接收
          如果重定向到页面,可以直接接收
  • 相关阅读:
    hdu 4183(网络流)
    hdu 1565&hdu 1569(网络流--最小点权值覆盖)
    hdu 1532(最大流)
    HDU 2141 Can you find it?
    HDU 1096 A+B for Input-Output Practice (VIII)
    HDU 1095 A+B for Input-Output Practice (VII)
    HDU 1094 A+B for Input-Output Practice (VI)
    HDU 1093 A+B for Input-Output Practice (V)
    HDU 1092 A+B for Input-Output Practice (IV)
    HDU 1091 A+B for Input-Output Practice (III)
  • 原文地址:https://www.cnblogs.com/taozhiye/p/6698894.html
Copyright © 2011-2022 走看看