目录
4.1 异常处理方式一:配置springmvc提供的简单异常处理器
4.2 异常处理方式二:全局异常处理,通过实现HandlerExceptionResolver异常处理解析器完成异常处理(1)首先在异常包中定义一个全局异常类
4.3 异常处理方式三:通过注解的方式将异常信息直接以JSON的格式回显到前端
一.SpringMVC的JSON数据返回
1.导入Maven依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.3</version> </dependency>
2.配置spring-mvc.xml
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJackson2HttpMessageConverter"/> </list> </property> </bean> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <!--处理中文乱码以及避免IE执行AJAX时,返回JSON出现下载文件--> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/json;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean>
3.@ResponseBody注解的使用
@ResponseBody注解的作用:
用于标记控制器方法的返回值应该作为 HTTP 响应的主体部分返回,而不是通过视图解析器进行渲染。
当使用 Spring MVC 框架时,控制器方法通常会返回某种类型的数据(例如对象、集合、字符串等),然后由视图解析器将该数据绑定到视图模板并生成最终的 HTML 或其他格式的响应。然而,有时候我们希望直接返回数据而不经过视图解析器的处理,将Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
在这种情况下,我们可以使用 @ResponseBody 注解来标记控制器方法。当该注解应用于方法时,Spring MVC 框架会将方法的返回值封装为适当的格式(例如 JSON),并将其作为 HTTP 响应的主体部分返回给客户端。这样可以方便地实现 RESTful API 服务,将数据直接以特定格式响应给调用端。
注意:在使用此注解之后不会再走视图解析器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
3.1案例演示
1.List集合转JSON
这里我们定义一个返回List集合的方法,最终到Controller层中标注@ResponseBody注解将集合数据转换成JSON数据
/** * 返回List<T> * @param req * @param hBook * @return */ @ResponseBody @RequestMapping("/list") public List<HBook> list(HttpServletRequest req, HBook hBook){ PageBean pageBean = new PageBean(); pageBean.setRequest(req); List<HBook> lst = this.hBookbiz.listPager(hBook, pageBean); return lst; }
测试结果:
2.Map集合转JSON
我们定义一个返回Map集合的方法,通过Controller中注解@ResponseBody,返回JSON格式数据
/** * 返回List<Map> * @param req * @param hBook * @return */ @ResponseBody @RequestMapping("/mapList") public List<Map> mapList(HttpServletRequest req, HBook hBook){ PageBean pageBean = new PageBean(); pageBean.setRequest(req); List<Map> lst = this.hBookbiz.mapListPager(hBook, pageBean); return lst; }
测试结果
3.返回指定格式String
@ResponseBody @RequestMapping("/jsonStr") public String jsonStr(HttpServletRequest req, HBook hBook){ return "bookEdit"; }
测试结果
4. @ResponseBody用法
在整个Controller类中可将注解定义在类对象上面,这样整个类中的方法都使用了注解@ResponseBody
小结:由上面的案例得知,我们将对象、集合、字符串等类型数据,通过Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
5.Jackson
5.1介绍
Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。
特点
容易使用,提供了高层次外观,简化常用的用例。
无需创建映射,API提供了默认的映射大部分对象序列化。
性能高,快速,低内存占用
创建干净的json
不依赖其他库
代码开源
5.2常用注解