Spring MVC:如何返回自定义404错误页面?

克里斯蒂安·鲁道夫

我正在寻找一种干净的方法,当找不到请求的资源时,在Spring 4中返回自定义的404错误页面。对不同域类型的查询应导致不同的错误页面。

这里有一些代码可以表明我的意图(Meter是一个域类):

@RequestMapping(value = "/{number}", method = RequestMethod.GET)
public String getMeterDetails(@PathVariable("number") final Long number, final Model model) {
    final Meter result = meterService.findOne(number);
    if (result == null) {
        // here some code to return an errorpage
    }

    model.addAttribute("meter", result);
    return "meters/details";
}

我想象有几种解决问题的方法。首先,有可能创建RuntimeException

@ResponseStatus(HttpStatus.NOT_FOUND)
public class MeterNotFoundExcption extends RuntimeException { }

然后使用异常处理程序呈现自定义错误页面(可能包含指向仪表列表的链接或适当的链接)。

但是我不喜欢使用许多小异常来污染我的应用程序。

另一种可能性是HttpServletResponse手动使用和设置状态码:

@RequestMapping(value = "/{number}", method = RequestMethod.GET)
public String getMeterDetails(@PathVariable("number") final Long number, final Model model,
final HttpServletResponse response) {
    final Meter meter = meterService.findOne(number);
    if (meter == null) {
        response.setStatus(HttpStatus.NOT_FOUND.value());
        return "meters/notfound";
    }

    model.addAttribute("meter", meter);
    return "meters/details";
}

但是,使用此解决方案,我必须为许多控制器方法(如编辑,删除)复制前5行。

有没有一种优雅的方法可以防止重复复制这些行?

克里斯蒂安·鲁道夫

解决方案比想像的要简单得多。可以使用一种通用ResourceNotFoundException定义,如下所示:

public class ResourceNotFoundException extends RuntimeException { }

然后可以使用ExceptionHandler注释处理每个控制器中的错误

class MeterController {
    // ...
    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String handleResourceNotFoundException() {
        return "meters/notfound";
    }

    // ...

    @RequestMapping(value = "/{number}/edit", method = RequestMethod.GET)
    public String viewEdit(@PathVariable("number") final Meter meter,
                           final Model model) {
        if (meter == null) throw new ResourceNotFoundException();

        model.addAttribute("meter", meter);
        return "meters/edit";
    }
}

每个控制器都可ExceptionHandler以为定义自己的控制器ResourceNotFoundException

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过在Spring MVC中返回自定义的错误页面来全局处理404异常?

来自分类Dev

如何通过在Spring MVC中返回自定义的错误页面来全局处理404异常?

来自分类Dev

Spring Security自定义登录页面返回404

来自分类Dev

Spring Boot和自定义404错误页面

来自分类Dev

spring-boot中的自定义404错误页面

来自分类Dev

捕获 404 错误 spring boot 以返回自定义 html

来自分类Dev

Spring Boot/Security - 自定义 404 页面

来自分类Dev

基于Spring Java的自定义错误页面配置

来自分类Dev

spring boot中的自定义错误页面

来自分类Dev

使用Spring Web MVC自定义处理405错误

来自分类Dev

Spring Boot如何在验证@PathVariable参数时返回自定义错误消息

来自分类Dev

如何使用Spring MVC在SimpleDateFormat中指定自定义验证错误消息

来自分类Dev

如何在Spring MVC中配置自定义MediaType?

来自分类Dev

如何在Spring MVC中执行自定义验证?

来自分类Dev

Spring MVC:如何从自定义接口实现DAO

来自分类Dev

Spring Boot自定义登录页面

来自分类Dev

带有spring-boot的spring-security,自定义登录页面,错误403

来自分类Dev

Spring Boot-具有独立tomcat的自定义404页面

来自分类Dev

Spring MVC自定义验证器

来自分类Dev

Spring Security自定义登录错误

来自分类Dev

自定义Spring Oauth错误

来自分类Dev

问题:Spring 自定义登录返回 403 访问被拒绝页面

来自分类Dev

从自定义静态位置提供静态HTML时,Spring Boot抛出404错误

来自分类Dev

通过Java代码配置的具有Spring Security的自定义403错误页面

来自分类Dev

在Spring Boot应用程序中重定向到自定义错误页面时出错

来自分类Dev

当用户在Spring Boot应用程序中输入无效的URL时,如何显示自定义404页面?

来自分类Dev

如何在Spring MVC(非Spring Boot)应用程序中自定义Jackson

来自分类Dev

如何自定义Spring Batch DelimitedLineTokenizer

来自分类Dev

如何在Grails中自定义Spring Security插件登录页面

Related 相关文章

  1. 1

    如何通过在Spring MVC中返回自定义的错误页面来全局处理404异常?

  2. 2

    如何通过在Spring MVC中返回自定义的错误页面来全局处理404异常?

  3. 3

    Spring Security自定义登录页面返回404

  4. 4

    Spring Boot和自定义404错误页面

  5. 5

    spring-boot中的自定义404错误页面

  6. 6

    捕获 404 错误 spring boot 以返回自定义 html

  7. 7

    Spring Boot/Security - 自定义 404 页面

  8. 8

    基于Spring Java的自定义错误页面配置

  9. 9

    spring boot中的自定义错误页面

  10. 10

    使用Spring Web MVC自定义处理405错误

  11. 11

    Spring Boot如何在验证@PathVariable参数时返回自定义错误消息

  12. 12

    如何使用Spring MVC在SimpleDateFormat中指定自定义验证错误消息

  13. 13

    如何在Spring MVC中配置自定义MediaType?

  14. 14

    如何在Spring MVC中执行自定义验证?

  15. 15

    Spring MVC:如何从自定义接口实现DAO

  16. 16

    Spring Boot自定义登录页面

  17. 17

    带有spring-boot的spring-security,自定义登录页面,错误403

  18. 18

    Spring Boot-具有独立tomcat的自定义404页面

  19. 19

    Spring MVC自定义验证器

  20. 20

    Spring Security自定义登录错误

  21. 21

    自定义Spring Oauth错误

  22. 22

    问题:Spring 自定义登录返回 403 访问被拒绝页面

  23. 23

    从自定义静态位置提供静态HTML时,Spring Boot抛出404错误

  24. 24

    通过Java代码配置的具有Spring Security的自定义403错误页面

  25. 25

    在Spring Boot应用程序中重定向到自定义错误页面时出错

  26. 26

    当用户在Spring Boot应用程序中输入无效的URL时,如何显示自定义404页面?

  27. 27

    如何在Spring MVC(非Spring Boot)应用程序中自定义Jackson

  28. 28

    如何自定义Spring Batch DelimitedLineTokenizer

  29. 29

    如何在Grails中自定义Spring Security插件登录页面

热门标签

归档