`
lovefly_zero
  • 浏览: 390039 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
社区版块
存档分类
最新评论

Spring Json View之错误处理和异常处理

阅读更多

错误处理

错误处理是在控制器增加一些公共或字段级别的错误(绑定结果集)到Model后触发的。 

  1. 配置
  2. HttpStatusError
  3. ModelFlagError 
  4. 自主实现JsonErrorHandler

 

1. Spring配置文件:view.xml

把错误(公共级别的和字段级别的)配置好后转换成一个json字符串,所有注册的Json错误处理会按它们被添加的顺序来触发。

 

下列是JsonErrorHadnders的实现:

 

HttpStatusError

通过response.setStatus(errorCode)设置一个新返回状态;一些Ajax框架比如prototype.js中触发成功状态使用返回状态编码是200299,失败状态使用>=300,

默认编代码为311。

 

ModelFlagError

Model里增加一个简单键值对。一些Web2.0 表现层框架需要一个标记来判断服务器端的操作是否成功或失败。比如Ext框架需要一个failure=true 或者success=true。

默认标记是failure=true。

 

<beans>

<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">

<property name="jsonErrors">

<list>

<ref bean="statusError" />

<ref bean="modelflagError" />

</list>

</property>

</bean>

<bean name="statusError"

class="org.springframework.web.servlet.view.json.error.HttpStatusError"/>

<bean name="modelflagError"

class="org.springframework.web.servlet.view.json.error.ModelFlagError"/>

</beans>

 

效果:

=======

Response-Status : 311

{"command":{

"birthday":"30-01-2008",

"placeofbirth":"Sydney"

},

"failure":"true",

"hasGlobalErrors":"true",

"globalerrors": ["errormessage1","errormessage2"],

"hasFieldErrors":"true",

"fielderrors":{

"birthday":"Please enter a valide date!"

}} 

 

2. HttpStatusError

 

你可以通过在HttpStatusError Bean的errorCode属性里自定义一个状态错误编码增加到响应信息里。

 

<beans>

<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">

<property name="jsonErrors">

<list>

<ref bean="statusError" />

</list>

</property>

</bean>

<bean name="statusError"

class="org.springframework.web.servlet.view.json.error.HttpStatusError">

<property name="errorCode"><value>999</value></property>

</bean>

</beans>

 

效果:

=======

Response-Status : 999

{"command":{

"birthday":"30-01-2008",

"placeofbirth":"Sydney"

},

"hasGlobalErrors":"true",

"globalerrors": ["errormessage1","errormessage2"],

"hasFieldErrors":"true",

"fielderrors":{

"birthday":"Please enter a valide date!"

}}

 

3. ModelFlagError

 

你可以通过在ModelFlagError Bean以设置键和值属性的方式把它们以键值对的形式添加到Model里。

 

<beans>

<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">

<property name="jsonErrors">

<list>

<ref bean="statusError" />

<ref bean="modelflagError" />

</list>

</property>

</bean>

<bean name="modelflagError"

class="org.springframework.web.servlet.view.json.error.ModelFlagError">

<property name="name"><value>failure</value></property>

<property name="value"><value>true</value></property>

</bean>

</beans> 

 

效果:

=======

Response-Status : 200

{"command":{

"birthday":"30-01-2008",

"placeofbirth":"Sydney"

},

"failure":"true",

"hasGlobalErrors":"true",

"globalerrors": ["errormessage1","errormessage2"],

"hasFieldErrors":"true",

"fielderrors":{

"birthday":"Please enter a valide date!"

}}

 

4. 自主实现JsonErrorHandler

 

最后,您也可以通过实现JsonErrorHandler来创建自己的错误处理。

 

public class MyErrorHandler implements JsonErrorHandler {

public void triggerError(Map model, RequestContext rc, BindingResult br,

HttpServletRequest request, HttpServletResponse response)

throws Exception{

// Do something ...

}

 

 

异常处理

Spring Json-View 提供HandlerExceptionResolver (JsonExceptionResolver)Controller操作的期间捕获并抛出异常。

 

  1. 配置
  2. JsonErrorHandler
  3. JsonExceptionHandler

         1.ExceptionMessageExceptionHandler(异常消息异常处理器)

         2.StackTraceExceptionHandler (堆栈异常处理器)

         3.自定义实现JsonExceptionHandler 

 

1. 配置:Spring ApplicationContext

你几乎只需要注册一个JsonErrorHandlers 或者 JsonExceptionHandler 就可以来操作函数中的响应以便抛出异常。 

 

注意

       把JsonExceptionResolver 注册在ApplicationContext.xml

       而不是view.xml !!!,不然会找不到它。

 

JsonErrorHandlers

JsonErrorHandlers 发响应到客户端因为有些产生了错误。详细信息参见上面错误处理部分。

 

HttpStatusError

response.setStatus(错误编码)设置一个响应状态  

ModelFlagError

Model中添加一个简单键值对。 

 

JsonExceptionHandler

JsonExceptionHandler负责把Java异常对象转换成一个Json字符串。 

 

ExceptionMessageExceptionHandler

添加一个Java异常到Model里。默认的ModelKey"exception.message ". ExceptionMessageExceptionHandler 通过"Exception Classname : Exception Message "格式设置错误信息。

比如 : "java.lang.IllegalArgumentException : Please set Parameter "

 

StackTraceExceptionHandler  

把完整的堆栈异常添加到Model.默认的ModelKey"exception.stacktrace".replaceLineBreakes=true时表示可用Html</br>标记代替"\n"。

默认replaceLineBreakes=false

 

<beans>

<bean id="exceptionResolver"

class="org.springframework.web.servlet.view.json.exception.JsonExceptionResolver">

<property name="exceptionView"><value>jsonView</value></property>

<property name="errorHandler">

<list>

<ref bean="statusError" />

<ref bean="modelFlagError" />

</list>

</property>

<property name="exceptionHandler">

<list>

<ref bean="exceptionMessageExceptionHandler" />

<ref bean="stackTraceExceptionHandler" />

</list>

</property>

</bean>

<bean name="exceptionMessageExceptionHandler"

class="org.springframework.web.servlet.view.json.exception.ExceptionMessageExceptionHandler" />

<bean name="stackTraceExceptionHandler"

class="org.springframework.web.servlet.view.json.exception.StackTraceExceptionHandler" />

<bean name="statusError"

class="org.springframework.web.servlet.view.json.error.HttpStatusError"/>

<bean name="modelFlagError"

class="org.springframework.web.servlet.view.json.error.ModelFlagError"/>

</beans>

 

效果:

=======

Response-Status : 311

{

"failure":"true",

"exception.message":"java.lang.Exception: You throw an exeption !",

"exception.stacktrace": "java.lang.Exception: You throw an exeption !

\n\tat org.thing.spring.json.controller.[...]

\n\tat org.springframework.web.servlet.mvc.[...]

[...]"

}

 

2. ExceptionMessageExceptionHandler

你也可以自己订制Model-key方式的异常信息。默认是exception.message

<beans>

<bean id="exceptionResolver"

class="org.springframework.web.servlet.view.json.exception.JsonExceptionResolver">

<property name="exceptionView"><value>jsonView</value></property>

<property name="exceptionHandler">

<list>

<ref bean="exceptionMessageExceptionHandler" />

</list>

</property>

</bean>

<bean name="exceptionMessageExceptionHandler"

class="org.springframework.web.servlet.view.json.exception.ExceptionMessageExceptionHandler">

<property name="modelKey"><value>myKey</value></property>

</bean>

</beans>

 

效果:

=======

Response-Status : 200

{

"myKey":"java.lang.Exception: You throw an exeption !"

}

 

3. StackTraceExceptionHandler

你能订制Model-Key的堆栈跟踪异常(默认是exception.stacktrace);你也能用Html视图模式展现它,replaceLineBreakes=true可用Html</br>标记代替"\n",默认replaceLineBreakes=false 

<beans>

<bean id="exceptionResolver"

class="org.springframework.web.servlet.view.json.exception.JsonExceptionResolver">

<property name="exceptionView"><value>jsonView</value></property>

<property name="exceptionHandler">

<list>

<ref bean="stackTraceExceptionHandler" />

</list>

</property>

</bean>

<bean name="stackTraceExceptionHandler"

class="org.springframework.web.servlet.view.json.exception.StackTraceExceptionHandler">

<property name="replaceLineBreakes"><value>true</value></property>

<property name="modelKey"><value>myKey</value></property>

</bean>

</beans>

 

效果:

=======

Response-Status : 200

{

"myKey": "java.lang.Exception: You throw an exeption !

<\br>\tat org.thing.spring.json.controller.[...]

<\br>\tat org.springframework.web.servlet.mvc.[...]

[...]"

}

 

4. Custom implementation of JsonExceptionHandler

你也通过实现JsonExceptionHandler接口,并可用一些完全不同的方式来重构它。

 

public class MyExceptionHandler implements JsonExceptionHandler {

public void triggerException(Exception exception, Map model,

HttpServletRequest request, HttpServletResponse response)

throws Exception{

// Do something ...

}

分享到:
评论

相关推荐

    四. Spring MVC 3 支持json及 常见错误解决

    3. **视图解析器**:如果你的返回类型是`ModelAndView`,你可以配置一个`MappingJackson2JsonView`,这样视图会自动将模型数据转换为JSON。 4. **JSON与Ajax**:Spring MVC 3与jQuery或其他JavaScript库配合,可以...

    spring-json 工程依赖

    3. **ModelAndView与JsonView**:在Spring MVC中,可以创建一个`ModelAndView`对象,并设置`JsonView`,这样在视图解析时会自动将模型数据转化为JSON。 4. **HTTP消息转换器**:Spring MVC通过`...

    spring web 4.1处理json

    5. **错误处理**: 当JSON绑定失败时,Spring默认会返回一个HTTP 400 Bad Request错误。可以通过自定义异常处理器,如`HandlerExceptionResolver`,来优雅地处理这些错误,提供详细的错误信息。 总之,Spring Web ...

    json在spring中的应用

    7. **异常处理**:在处理异常时,Spring MVC可以通过`@ExceptionHandler`注解返回JSON格式的错误信息,这对于提供统一的错误反馈和调试非常有用。 8. **自定义JSON视图**:如果需要对JSON的生成进行更精细的控制,...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    例如,性能优化、错误处理的增强、对Java 13的支持以及更好的反应式编程支持。这个版本可能还包括对旧版本中已知问题的修复,以提升稳定性和兼容性。 Spring Web MVC的注解驱动能力使得控制器的编写更加简洁。比如...

    springmvc加入json支持.zip

    另外,合理使用`@JsonView`注解,可以控制JSON响应中包含哪些字段,避免传输不必要的数据。 7. **错误处理**:在处理JSON数据时,可能会遇到解析错误、类型不匹配等问题。为了解决这些问题,我们需要捕获并处理`...

    最全最经典spring-mvc教程

    错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...

    springmvc + jquery + ajax + json 异步传递数据

    SpringMVC是Spring框架的一部分,是一个强大的MVC(Model-View-Controller)架构,用于构建企业级的Web应用。它提供了一个灵活的模型绑定,数据验证,以及异常处理机制,使得开发者可以更专注于业务逻辑,而不是底层...

    springmvc+mybatis+jquery easyui+json+log4j

    Spring MVC、MyBatis、jQuery EasyUI、JSON 和 Log4j 是常见的 Java Web 开发技术栈,它们在构建高效、可维护的Web应用程序中扮演着重要角色。下面将详细介绍这些技术及其整合应用。 1. Spring MVC:Spring MVC 是 ...

    SpringMVC中使用JSON传递数据时用的jar包

    5. **配置JsonView**:为了更精细地控制JSON输出,你可以使用`@JsonView`注解来指定序列化时包含哪些字段。创建一个视图接口,然后在你的实体类和Controller方法中使用它。 6. **错误处理**:在处理JSON数据时,...

    ajax向springmvc传递json

    7. 错误处理:在Ajax请求中,需要捕获并处理可能出现的错误,如网络错误、服务器异常等。可以通过error回调函数来实现。 总结来说,Ajax向Spring MVC传递JSON涉及的主要步骤包括前端的数据序列化、Ajax请求的发起、...

    源码 Spring MVC【基于Spring4.x】讲师:佟刚

    7. **异常处理**:Spring MVC提供了一套完整的异常处理机制,通过@ControllerAdvice和@ExceptionHandler注解,可以全局地处理异常,提供统一的错误反馈。 8. **拦截器(Interceptor)**:拦截器允许在请求处理前后...

    Android JSON获取 解析显示 附带Springboot -JSON服务器

    在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于与服务器进行数据交互。本教程将深入讲解如何在...实践中,你可能还需要考虑错误处理、网络状态检查、数据缓存等更多细节。

    springMVC+hibernate+spring4.3 jar包整合

    3. 配置Spring MVC:创建spring-mvc-dispatcher-servlet.xml,设置DispatcherServlet,定义视图解析器,如InternalResourceViewResolver,以及模型数据绑定、异常处理等。 4. 配置Hibernate:在Hibernate配置文件...

    Spring-mvc-showcase

    这提供了良好的错误处理和用户体验。 7. **国际化与本地化**:Spring MVC 支持多语言环境,通过 LocaleResolver 和 MessageSource 配置,可以实现动态切换语言,提供不同地区的用户界面。 8. **数据绑定与验证**:...

    struts+spring集成

    7. **异常处理**:Spring提供了全局异常处理机制,可以捕获并处理Struts2中抛出的异常,提供统一的错误页面或者返回JSON格式的错误信息。 8. **国际化**:Struts2和Spring都可以支持国际化,集成后可以更好地协调这...

    org.springframework.web.jar

    5. **Exception Handling**:Spring MVC允许开发者定义全局和局部的异常处理器,通过`@ExceptionHandler`注解处理特定类型的异常,提供统一的错误页面或者JSON响应。 6. **RESTful Support**:Spring Web还支持...

    精通Spring MVC4

    Spring MVC提供了一种优雅的异常处理机制,可以使用@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。此外,还可以自定义错误页面,提高用户体验。 8. **数据绑定和验证** Spring MVC支持自动的数据...

    spring mvc

    13. **异常处理**: 通过@ControllerAdvice和@ExceptionHandler,可以全局捕获并处理应用程序中的异常,提供统一的错误页面或JSON响应。 14. **Internationalization (i18n) & Localization (l10n)**: Spring MVC ...

    spring-mvc-官方中文文档

    10. **异常处理**:通过@ControllerAdvice 和 @ExceptionHandler 注解,可以全局处理应用程序中的异常,提供统一的错误页面或 JSON 响应。 11. **验证**:Spring MVC 集成了 Bean Validation API,允许开发者对模型...

Global site tag (gtag.js) - Google Analytics