如何在try-catch中重定向到错误视图?

mwkjh3gx  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(427)

当我的方法retrun modeland view时,我在try-catch中返回的错误视图可以很好地工作,但是当我的方法有一个字符串返回时,如何返回我的视图呢?
这样地

@RequestMapping(value="/librairie/supprimerLivre/{isbn}", method = RequestMethod.GET)
public String supprimerLivre(@PathVariable("isbn") String isbn, HttpServletRequest request){
    try{
      gestPanier = new GestPanier(request);
      //rechercher le livre qui correspond a l'isbn passer en parametre
    LivreAchete livre = gestPanier.getListe().stream().filter(c -> c.getIsbn().equals(isbn)).findFirst().get();

    //supprimer le livre
    gestPanier.supprimer(livre);
    return "redirect:/librairie/afficherPanier";  
    }
    catch(Exception ex){
        return ModelAndView  return new ModelAndView("Error", "model",new ErrorviewModel("/librairie/paiement", ex.getMessage(), ex));
    }
}

我不能返回modelandview,因为我的方法有一个字符串返回,但是我如何重定向到我的视图?

hivapdat

hivapdat1#

您可以尝试这样的方法(这是基于控制器的异常处理的spring方法之一):

// Name of the function is not important (just an example)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(RuntimeException.class) // Or handle some custom exception of yours
    public ModelAndView supprimerLivreHandler(HttpServletRequest request, Exception ex) {
        return new ModelAndView("Error", "model",new ErrorviewModel("/librairie/paiement", ex.getMessage(), ex));
    }

    @RequestMapping(value="/librairie/supprimerLivre/{isbn}", method = RequestMethod.GET)
    public String supprimerLivre(@PathVariable("isbn") String isbn, HttpServletRequest request){
        try{
            gestPanier = new GestPanier(request);
            //rechercher le livre qui correspond a l'isbn passer en parametre
            LivreAchete livre = gestPanier.getListe().stream().filter(c -> c.getIsbn().equals(isbn)).findFirst().get();

            //supprimer le livre
            gestPanier.supprimer(livre);
            return "redirect:/librairie/afficherPanier";
        }
        catch(Exception ex){
            // When this Exception is thrown, the supprimerLivreHandler function will be called
            throw new RuntimeException(); // Or throw some custom exception of yours
        }
    }

如果您想阅读更多关于springmvc异常处理的信息,请参考这个网站(我的示例基于该网站上描述的方法之一)。

r9f1avp5

r9f1avp52#

你可以通过使用throws而不是try-catch来解决这个问题。

@RequestMapping(value="/librairie/supprimerLivre/{isbn}", method = RequestMethod.GET)
public String supprimerLivre(@PathVariable("isbn") String isbn, HttpServletRequest request) 
throws Exception{
    gestPanier = new GestPanier(request);
    LivreAchete livre = gestPanier.getListe().stream().filter(c -> c.getIsbn().equals(isbn)).findFirst().get();

    gestPanier.supprimer(livre);
    return "redirect:/librairie/afficherPanier";
}

然后处理调用方法的异常。

try{
    supprimerLivre(isbn, request); //That's where you call the method
} catch (Exception e) {
    ModelAndView model = new ModelAndView("Error", "model",new ErrorviewModel("/librairie/paiement", ex.getMessage(), ex));
}

相关问题