本文介绍SpringMVC中的异常处理,@Controller注解的方法可能由于各种各样的原因抛出异常,如果没有写try...catch()...语句,异常的堆栈信息将直接抛给浏览器,这样对用户来说很不友好,并且异常的堆栈信息可能含有一些敏感信息(如数据库的表字段,sql语句等等...)是不能暴露出去的。因此在程序中最好捕捉到所有的异常并处理后将友好的界面或者信息返回给客户端,SpringMVC提供了一个Handler,该handler指定一种异常,并返回一个view,举个例子,增加一个Controller,叫ExceptionController:
- package org.springframework.samples.mvc.exceptions;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- @Controller
- public class ExceptionController {
- @ExceptionHandler
- public @ResponseBody String handle(IllegalStateException e) {
- return "IllegalStateException handled!";
- }
- @RequestMapping("/exception")
- public @ResponseBody String exception() {
- throw new IllegalStateException("Sorry!");
- }
- }
package org.springframework.samples.mvc.exceptions; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class ExceptionController { @ExceptionHandler public @ResponseBody String handle(IllegalStateException e) { return "IllegalStateException handled!"; } @RequestMapping("/exception") public @ResponseBody String exception() { throw new IllegalStateException("Sorry!"); } }
@ExceptionHandler注解的方法接收一个异常类型的参数,返回值类型和@RequestMapping一样(String,void,ModelAndView...),
访问http://localhost:8080/web/exception,浏览器显示"IllegalStateException handled!"
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
本文介绍SpringMVC的验证(validation),在Convert一文中,我们知道SpringMVC能很方便的将提交的参数转成(convert)自定义的JavaBean,现在加入对JavaBean的验证,比如要求JavaBean的属性number(private Integer number)不允许为null且最大为5,属性date(private Date date)满足时间是未来的(今天以后的日期)。为此,pom.xml中需要添加两个依赖:
- <!-- JSR 303 with Hibernate Validator -->
- <dependency>
- <groupId>javax.validation</groupId>
- <artifactId>validation-api</artifactId>
- <version>1.0.0.GA</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-validator</artifactId>
- <version>4.1.0.Final</version>
- </dependency>
<!-- JSR 303 with Hibernate Validator --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.1.0.Final</version> </dependency>
javax.validation.validation-api-1.0.0.GA.jar是一个标准,只有接口方法(以javax开头的包一般都是接口包,业界定义的一些标准,比如servlet-api-2.5.jar中的javax.servlet.HttpServletRequest),还有一个是Hibernate提供的实现包org.hibernate.hibernate-validator-4.1.0.Final。
增加一个Controller,ValidationController:
- package org.springframework.samples.mvc.validation;
- import javax.validation.Valid;
- import org.springframework.stereotype.Controller;
- import org.springframework.validation.BindingResult;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- @Controller
- public class ValidationController {
- // enforcement of constraints on the JavaBean arg require a JSR-303 provider on the classpath
- @RequestMapping("/validate")
- public @ResponseBody String validate(@Valid JavaBean bean, BindingResult result) {
- if (result.hasErrors()) {
- return "Object has validation errors";
- } else {
- return "No errors";
- }
- }
- }
package org.springframework.samples.mvc.validation; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class ValidationController { // enforcement of constraints on the JavaBean arg require a JSR-303 provider on the classpath @RequestMapping("/validate") public @ResponseBody String validate(@Valid JavaBean bean, BindingResult result) { if (result.hasErrors()) { return "Object has validation errors"; } else { return "No errors"; } } }
和一个JavaBean:
- package org.springframework.samples.mvc.validation;
- import java.util.Date;
- import javax.validation.constraints.Future;
- import javax.validation.constraints.Max;
- import javax.validation.constraints.NotNull;
- import org.springframework.format.annotation.DateTimeFormat;
- import org.springframework.format.annotation.DateTimeFormat.ISO;
- public class JavaBean {
- @NotNull
- @Max(5)
- private Integer number;
- @NotNull
- @Future
- @DateTimeFormat(iso=ISO.DATE)
- private Date date;
- public Integer getNumber() {
- return number;
- }
- public void setNumber(Integer number) {
- this.number = number;
- }
- public Date getDate() {
- return date;
- }
- public void setDate(Date date) {
- this.date = date;
- }
- }
package org.springframework.samples.mvc.validation; import java.util.Date; import javax.validation.constraints.Future; import javax.validation.constraints.Max; import javax.validation.constraints.NotNull; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat.ISO; public class JavaBean { @NotNull @Max(5) private Integer number; @NotNull @Future @DateTimeFormat(iso=ISO.DATE) private Date date; public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
@NotNull、@Future就是javax.validation.validation-api-1.0.0.GA.jar中定义的注解,满足之前说到的需求。
ValidationController的validate方法绑定了一个参数BindingResult result,通过这个变量就可以得到具体的验证信息,比如在validate方法中,如果验证不通过(result.hasErrors()),返回给浏览器文本"Object has validation errors"。
1. 访问"http://localhost:8080/web/validate",浏览器显示"Object has validation errors",number和date不能为空;
2. 访问"http://localhost:8080/web/validate?number=1",浏览器显示"Object has validation errors",date不能为空;
3. 访问"http://localhost:8080/web/validate?number=1&date=2012-03-31",浏览器显示"Object has validation errors",非今天以后的日期;
4. 访问"http://localhost:8080/web/validate?number=1&date=2012-04-01",浏览器显示"No errors";
5. 访问"http://localhost:8080/web/validate?number=6&date=2012-04-01",浏览器显示"Object has validation errors",number不能大于5;
相关推荐
在实际应用中,你可能还需要自定义一些特定的异常类,这些类继承自Laravel的`Exception`或其子类,以满足项目需求。通过这种方式,你可以为特定的业务逻辑错误创建专门的异常,并确保它们在API中以一致的方式呈现。 ...
《PyPI官网下载:深入理解django-extra-exceptions-1.0.0》 在Python的开发世界中,Django框架以其高效、灵活和强大的特性深受开发者喜爱。为了进一步提升Django项目的开发体验和错误处理效率,社区贡献了诸多扩展...
总结起来,`Laravel开发-exceptions`是关于如何在Laravel框架下有效地处理错误和异常,提供健壮的错误响应系统,从而确保应用在出现问题时仍能正常运行,同时为开发者提供足够的信息进行调试和优化。通过理解和掌握...
mvc-exceptions, 在我的MVC异常博客上,展示了 mvc异常注释:这个项目是使用 Spring Boot 。8和 spring 4.1的版本 1.1.8构建的- 请参见 pom.xml.POM构建一个 jar 文件而不是 WAR,因此必须将它作为Java应用程序运行...
"Laravel开发-laravel-api-exceptions .zip"这个压缩包很可能包含了关于如何在Laravel中管理和定制API异常响应的资源。下面,我们将深入探讨Laravel API异常处理的关键知识点。 1. **异常处理基础** - 在Laravel中...
Aspnet-marco-exceptions-core.zip,基本包异常.marco-exceptions-core,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5、css和javascript的网站,这些网站简单、快速,可以...
`laravel-email-exceptions`这个主题涉及的是在Laravel应用程序中处理电子邮件发送过程中的异常情况。在实际开发中,我们可能会遇到邮件发送失败的问题,此时理解和掌握Laravel的邮件异常处理机制就显得至关重要。 ...
gaedo-guice-0.4.18-exceptions.jar
gaedo-graphviz-0.4.6-exceptions.jar
gaedo-graphviz-0.4.8-exceptions.jar
gaedo-guice-0.4.17-exceptions.jar
gaedo-graphviz-0.4.3-exceptions.jar
gaedo-graphviz-0.4.9-exceptions.jar
gaedo-graphviz-0.4.5-exceptions.jar
gaedo-guice-0.4.19-exceptions.jar
gaedo-graphviz-0.4.4-exceptions.jar
资源分类:Python库 所属语言:Python 资源全名:asphalt-exceptions-1.0.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
`Laravel开发-exceptions` 涉及到的是Laravel中的错误异常处理机制,它允许开发者优雅地处理程序运行时可能出现的问题。在这个主题中,我们将深入探讨如何利用Laravel的异常处理工具,特别是结合Whoops库在开发和...
当在应用中抛出一个未捕获的异常时,Laravel会调用`App\Exceptions\Handler`类来处理这个异常。这个类有两个主要方法:`report`和`render`。 1. **report 方法**:用于记录异常或者将异常报告给远程服务,如错误...
根据提供的文档信息,我们可以归纳总结出一系列与Spring MVC框架相关的常见问题及解决方案。这些问题主要集中在配置错误、依赖缺失以及常见的异常处理等方面。 ### Spring MVC 项目常见错误与配置 #### 1. Java....