【问题标题】:Handling invalid URL's when using @ParamValue in Spring MVC在 Spring MVC 中使用 @ParamValue 时处理无效的 URL
【发布时间】:2015-02-11 09:26:36
【问题描述】:

我在我的控制器 (Spring MVC) 中使用 @ParamValue 注释。
说我的有效网址是:

www.temp.com/test/a,

www.temp.com/test/b

www.temp.com/test/c

所以,我的RequestMapping 是:

@RequestMapping(value = "/test/{value}", method = RequestMethod.GET)

现在,我的问题是,如果有人像这样键入 错误的 URL

www.temp.com/test/youarebroken

然后我必须在我的控制器中手动处理这种情况以显示 404 或未找到。
没有内置的东西 发送向我可以直接使用的服务器发出“未找到或 404”通知

【问题讨论】:

  • 该 URL 符合您的模式。要么使您的模式更具限制性,要么处理错误情况。默认情况下,平台如何知道 URL 无效?

标签: java spring spring-mvc


【解决方案1】:

您可以在@RequestMapping URL 中使用正则表达式。示例:

@RequestMapping(value = "/test/{value:[a-z]}", method = RequestMethod.GET)

【讨论】:

    【解决方案2】:

    最简单的解决方案是定义一个自定义异常处理程序,并在控制器内的验证失败时抛出自定义异常。这将要求您按照您所说的那样手动管理条件。

    另一种解决方案是使用全局异常处理程序并将其定义为处理由 Spring 内置处理的 HTTP 错误。

    在此链接中,您可以看到这两种方法:http://www.journaldev.com/2651/spring-mvc-exception-handling-exceptionhandler-controlleradvice-handlerexceptionresolver-json-response-example

    但是,根据您的问题,我了解到您希望在参数值中的某些条件不满足时自动返回异常,并且您不想在控制器中手动验证这一点。为此,您可以为特定类添加自定义验证,然后在 @ParamValue 之前设置 @Valid。

    您可以查看此链接以获取 DataBinding http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

    此链接用于对参数属性进行特定验证:Spring Web MVC - validate individual request params

    因此,简单来说,一个解决方案是定义一个自定义验证器,该验证器在失败时会引发自定义异常。为参数设置@Valid(检查链接)并调整自定义异常以处理 HTTP 错误(例如 HttpStatus.NOT_FOUND)。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      相关资源
      最近更新 更多