金华 网站建设,哪些网站适合用自适应,目前网站开发有什么缺点,网站推广公司排名方案目录 一、JSON处理
1.1 导入依赖
1.2 配置Spring-mvc.xml
1.3 ResponseBody注解使用
编辑
1.4 Jackson
1.4.1 定义
1.4.2 用途
1.4.3 用法
1.4.4 常用注解
1.5 作用
二、统一异常处理
2.1 为什么要全局异常处理#xff1f;
2.2 异常处理思路
2.3 SpringMVC异…目录 一、JSON处理
1.1 导入依赖
1.2 配置Spring-mvc.xml
1.3 ResponseBody注解使用
编辑
1.4 Jackson
1.4.1 定义
1.4.2 用途
1.4.3 用法
1.4.4 常用注解
1.5 作用
二、统一异常处理
2.1 为什么要全局异常处理
2.2 异常处理思路
2.3 SpringMVC异常分类
2.4 综合案例
2.4.1 异常处理方式一
2.4.2 异常处理方式二
2.4.3 异常处理方式三
三、收获 一、JSON处理
1.1 导入依赖
!-- JSON数据返回--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion${jackson.version}/version/dependency
1.2 配置Spring-mvc.xml
bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterproperty namemessageConverterslistref beanmappingJackson2HttpMessageConverter//list/property/beanbean idmappingJackson2HttpMessageConverterclassorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter!--处理中文乱码以及避免IE执行AJAX时返回JSON出现下载文件--property namesupportedMediaTypeslistvaluetext/html;charsetUTF-8/valuevaluetext/json;charsetUTF-8/valuevalueapplication/json;charsetUTF-8/value/list/property/bean
1.3 ResponseBody注解使用 ResponseBody是一个Spring MVC注解用于指示方法返回的值应该被序列化为HTTP响应的正文。它被添加到控制器方法中并告诉Spring MVC框架不要将方法的返回值解释为视图名称或模型数据。相反该注解告诉Spring MVC将返回值直接写入HTTP响应正文中这通常是JSON或XML格式。 注 通常ResponseBody注解与RequestMapping注解结合使用后者指定HTTP方法和请求URL以及其它可选的参数以告诉Spring MVC如何匹配请求并调用适当的控制器方法。 注意在使用此注解之后不会再走视图解析器而是直接将数据写入到输入流中他的效果等同于通过response对象输出指定格式的数据。 创建一个JsonController类如下
package com.Kissship.web;import com.Kissship.biz.MusicBiz;
import com.Kissship.exception.GlobalException;
import com.Kissship.model.Music;
import com.Kissship.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;ResponseBody
Controller
RequestMapping(/mic/json)
public class JsonController {Autowiredprivate MusicBiz musicBiz;/*** 返回ListT* param req* param music* return*/
// ResponseBodyRequestMapping(/list)public ListMusic list(HttpServletRequest req, Music music){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMusic lst this.musicBiz.listPager(music, pageBean);System.out.println(1/0);return lst;}/*** 返回T* param req* param music* return*/
// ResponseBodyRequestMapping(/load)public Music load(HttpServletRequest req, Music music){if(music.getMid() ! null){ListMusic lst this.musicBiz.listPager(music, null);return lst.get(0);}return null;}/*** 返回ListMap* param req* param music* return*/
// ResponseBodyRequestMapping(/mapList)public ListMap mapList(HttpServletRequest req, Music music){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMap lst this.musicBiz.mapListPager(music, pageBean);return lst;}/*** 返回Map* param req* param music* return*/
// ResponseBodyRequestMapping(/mapLoad)public Map mapLoad(HttpServletRequest req, Music music){if(music.getMid() ! null){ListMap lst this.musicBiz.mapListPager(music, null);return lst.get(0);}return null;}// ResponseBodyRequestMapping(/all)public Map all(HttpServletRequest req, Music music){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMusic lst this.musicBiz.listPager(music, pageBean);Map map new HashMap();map.put(lst,lst);map.put(pageBean,pageBean);return map;}// ResponseBody//全局异常RequestMapping(/jsonStr)public String jsonStr(HttpServletRequest req, Music music){if(true)throw new GlobalException(刘三金说爱她一万年!!!);return micEdit;}}然后紧接着在MusicBiz中添加以下代码如下
ListMap mapListPager(Music music, PageBean pageBean);
再在impl类中实现该接口如下
Overridepublic ListMap mapListPager(Music music, PageBean pageBean) {return musicMapper.mapListPager(music);} 然后根据实现的方法在逆向生成的musicMapper中添加
ListMap mapListPager(Music music);
musicMapper.xml
select idmapListPager resultTypejava.util.Map parameterTypecom.Kissship.model.Music select*from jay_musicwhereif testmname ! nulland mname like concat(%,#{mname},%)/if/where/select
添加完毕后我们开始测试效果如下
List集合转Json Map集合转JSon 1.4 Jackson
1.4.1 定义 ackson是一个流行的Java库用于序列化和反序列化Java对象和JSON数据。它被广泛用于Java应用程序中包括SpringMVC。 1.4.2 用途 在SpringMVC中可以使用Jackson来轻松地将Java对象转换为JSON数据和将JSON数据转换为Java对象。这样可以在SpringMVC应用程序中快速地处理和传输数据。 1.4.3 用法 使用Jackson需要在SpringMVC中添加Jackson依赖并配置JacksonMessageConverter。JacksonMessageConverter是SpringMVC中的一个消息转换器用于将Java对象转换为JSON数据和将JSON数据转换为Java对象。 Jackson还支持注解例如JsonProperty和JsonView可以帮助控制序列化和反序列化的行为。总的来说Jackson是一个强大的Java库可以使SpringMVC应用程序更方便地处理和传输数据。
1.4.4 常用注解
在SpringMVC中使用Jackson进行数据序列化和反序列化是非常方便的。以下是常用的Jackson注解 1. JsonFormat格式化输出日期类型的值 2. JsonInclude控制序列化过程中包含哪些属性 3. JsonIgnore忽略某些属性 4. JsonProperty指定属性的名称 5. JsonView根据视图序列化对象 6. JsonManagedReference和JsonBackReference解决对象循环引用的问题 7. JsonIdentityInfo为对象设置唯一标识 8. JsonTypeInfo序列化和反序列化时带上类型信息 9. JsonAutoDetect指定序列化和反序列化过程中哪些属性可见 10. JsonCreator定义一个构造函数用于反序列化 11. JsonAnyGetter和JsonAnySetter序列化和反序列化时动态处理属性 1.5 作用 返回JSON数据的作用主要有以下几个方面 1. 简化数据处理JSON是一种轻量级的数据交换格式它的结构简单、易于理解和使用。通过返回JSON数据可以更加轻松地处理和解析数据使得前后端的数据交互更加高效和便捷。 2. 支持跨域请求由于浏览器的同源策略限制不同域名之间的请求通常是不被允许的。但是通过跨域请求返回JSON数据可以利用JSONP等技术来实现跨域请求解决跨域问题方便进行数据交换。 3. 方便数据序列化和反序列化将数据序列化为JSON格式可以方便的进行数据的传输和存储同时在前端解析展示数据时也可以方便的将JSON数据反序列化为对象使得数据的传输和处理更加高效和便捷。 4. 支持多语言JSON是一种跨语言的数据格式可以在不同的编程语言之间通用支持多语言的开发和数据交换。 二、统一异常处理
2.1 为什么要全局异常处理 Java 中的全局异常处理是指在程序中统一处理所有的异常而不是在每个方法中单独处理异常。使用全局异常处理可以提高代码的可读性和可维护性减少代码冗余避免重复代码。此外全局异常处理可以将异常信息统一记录到日志中方便后续的问题排查和分析。如果不使用全局异常处理在出现异常时程序可能会直接终止用户体验也会受到影响。因此在 Java 中使用全局异常处理是一个好的编程实践。 2.2 异常处理思路
系统的dao、service、controller出现异常都通过throws Exception向上抛出最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc提供全局异常处理器一个系统只有一个异常处理器进行统一异常处理。 2.3 SpringMVC异常分类
在SpringMVC中异常可以分为以下几类 1. 控制器方法异常当控制器方法抛出异常时SpringMVC会将异常信息包装成一个特殊的响应对象返回给客户端。 2. 数据转换异常当SpringMVC无法将请求参数转换成对应类型的数据时会抛出数据转换异常。 3. 数据验证异常当请求参数不符合预定的验证规则时会抛出数据验证异常。 4. 消息转换异常当SpringMVC无法将响应数据转换成客户端需要的类型时会抛出消息转换异常。 5. 文件上传异常当文件上传过程中出现问题时会抛出文件上传异常。 6. MVC配置异常当SpringMVC配置出现问题时会抛出MVC配置异常。 7. 未处理的异常当SpringMVC中出现未处理的异常时会抛出未处理的异常。 2.4 综合案例
2.4.1 异常处理方式一
SpringMVC中自带了一个异常处理器叫SimpleMappingExceptionResolver该处理器实现了HandlerExceptionResolver 接口全局异常处理器都需要实现该接口。
在Spring-mvc.xml中添加以下代码如下
!-- springmvc提供的简单异常处理器 --bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolver!-- 定义默认的异常处理页面 --property namedefaultErrorView valueerror/!-- 定义异常处理页面用来获取异常信息的变量名也可不定义默认名为exception --property nameexceptionAttribute valueex/!-- 定义需要特殊处理的异常这是重要点 --property nameexceptionMappingspropsprop keyjava.lang.RuntimeExceptionerror/prop/props!-- 还可以定义其他的自定义异常 --/property/bean
/beans
注页面跳转由SpringMVC来接管了所以此处的定义默认的异常处理页面都应该配置成逻辑视图名。
新建一个errpr.jsp用来展示异常效果如下
%--Created by IntelliJ IDEA.User: jjDate: 2023/9/13Time: 15:43To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleerror/title
/head
body
错误信息页面。。。
hr
${ex}
/body
/html然后造一个错误数据如下
RequestMapping(/mapList)public ListMap mapList(HttpServletRequest req, Music music){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMap lst this.musicBiz.mapListPager(music, pageBean);System.out.println(1/0);return lst;}
测试结果 2.4.2 异常处理方式二
首先在异常包中定义一个全局异常的类如下 异常类代码如下
package com.Kissship.exception;public class GlobalException extends RuntimeException {public GlobalException() {}public GlobalException(String message) {super(message);}public GlobalException(String message, Throwable cause) {super(message, cause);}public GlobalException(Throwable cause) {super(cause);}public GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}
创建一个全局异常处理类代码如下
package com.Kissship.component;import com.Kissship.exception.GlobalException;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;Component
public class GlobalExceptionHandler implements HandlerExceptionResolver {Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o, Exception e) {ModelAndView mv new ModelAndView();mv.setViewName(error);if (e instanceof GlobalException){GlobalException globalException (GlobalException) e;mv.addObject(ex,globalException.getMessage());mv.addObject(msg,全局异常....);}else if (e instanceof RuntimeException){RuntimeException runtimeException (RuntimeException) e;mv.addObject(ex,runtimeException.getMessage());mv.addObject(msg,运行时异常....);}else {}return mv;}
}
测试结果如下 2.4.3 异常处理方式三
注前两种异常不可同时使用。
定义一个新的异常处理方法如下
// 返回错误json数据ResponseBodyExceptionHandlerpublic Map handler(Exception e){Map map new HashMap();if (e instanceof GlobalException){GlobalException globalException (GlobalException) e;map.put(ex,globalException.getMessage());map.put(msg,全局异常....);}else if (e instanceof RuntimeException){RuntimeException runtimeException (RuntimeException) e;map.put(ex,runtimeException.getMessage());map.put(msg,运行时异常....);}else {map.put(ex,e.getMessage());map.put(msg,其它异常....);}return map;}
测试结果如下 三、收获
学习SpringMVC的异常处理机制可以带给我们以下收获 1. 更好的错误处理异常处理机制可以在应用程序中捕获并处理各种类型的错误包括运行时错误、网络错误和数据库错误使得我们能够更好地处理错误提高应用程序的可靠性和健壮性。 2. 更好的用户体验异常处理机制可以帮助我们提供更好的用户体验通过捕获和处理异常我们可以向用户提供有用的错误信息帮助他们更好地理解错误原因并采取适当的措施。 3. 更高的代码可读性异常处理机制能够使代码更加清晰减少代码中的嵌套和冗余提高代码的可读性和可维护性。 4. 更好的安全性异常处理机制也可以帮助我们处理安全问题例如防止 SQL 注入攻击等保护应用程序的安全性。 总体来说学习SpringMVC的异常处理机制可以帮助我们在开发高质量的Web应用程序时更加自信和有效。 最后SpringMVC之JSON返回及异常处理机制就到这里祝大家在敲代码的路上一路通畅!
感谢大家的观看 !