大学生创业服务网站建设方案,中专网站建设与管理就业前景,个人静态网站首页怎么做,网站运营这么做目录 JSON处理
导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试
目录
JSON处理
导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试 Jackson
定义
用法
常用注解
统一异常处理
为什么要全局异常处理#xff1f;
异常处理思路
SpringMVC异常分类
综…目录 JSON处理
导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试
目录
JSON处理
导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试 Jackson
定义
用法
常用注解
统一异常处理
为什么要全局异常处理
异常处理思路
SpringMVC异常分类
综合案例
异常处理方式一
异常处理方式二
异常处理方式三 Jackson
定义
用法
常用注解
统一异常处理
为什么要全局异常处理
异常处理思路
SpringMVC异常分类
综合案例
异常处理方式一
异常处理方式三 JSON处理
导入依赖
!-- 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 配置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 ResponseBody注解使用
ResponseBody是一个Spring MVC注解用于指示方法返回的值应该被序列化为HTTP响应的正文。它被添加到控制器方法中并告诉Spring MVC框架不要将方法的返回值解释为视图名称或模型数据。相反该注解告诉Spring MVC将返回值直接写入HTTP响应正文中这通常是JSON或XML格式。 创建一个JsonController类
package com.xiaoxu.web;import com.xiaoxu.biz.BookxxBiz;
import com.xiaoxu.exception.GlobalException;
import com.xiaoxu.model.Bookxx;
import com.xiaoxu.utis.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 org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;//ResponseBody
//Controller
RestController
RequestMapping(/clz/json)
public class JsonController {Autowiredprivate BookxxBiz bookxxBiz;/*** 返回ListT* param req* param bookxx* return*/
// ResponseBodyRequestMapping(/list)public ListBookxx list(HttpServletRequest req, Bookxx bookxx){PageBean pageBean new PageBean();pageBean.setRequest(req);ListBookxx lst this.bookxxBiz.selectPage(bookxx, pageBean);System.out.println(1 / 0);return lst;}/*** 返回T* param req* param bookxx* return*/
// ResponseBodyRequestMapping(/load)public Bookxx load(HttpServletRequest req, Bookxx bookxx){if(bookxx.getBook_id() ! null){ListBookxx lst this.bookxxBiz.selectPage(bookxx, null);return lst.get(0);}return null;}/*** 返回ListMap* param req* param bookxx* return*/
// ResponseBodyRequestMapping(/mapList)public ListMap mapList(HttpServletRequest req, Bookxx bookxx){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMap lst this.bookxxBiz.mapListPager(bookxx, pageBean);return lst;}/*** 返回Map* param req* param bookxx* return*/
// ResponseBodyRequestMapping(/mapLoad)public Map mapLoad(HttpServletRequest req, Bookxx bookxx){if(bookxx.getBook_id() ! null){ListMap lst this.bookxxBiz.mapListPager(bookxx, null);return lst.get(0);}return null;}// ResponseBodyRequestMapping(/all)public Map all(HttpServletRequest req, Bookxx bookxx){PageBean pageBean new PageBean();pageBean.setRequest(req);ListBookxx lst this.bookxxBiz.selectPage(bookxx, pageBean);Map map new HashMap();map.put(lst,lst);map.put(pageBean,pageBean);return map;}// ResponseBodyRequestMapping(/jsonStr)public String jsonStr(HttpServletRequest req, Bookxx bookxx){System.out.println(-----------------------------);if(true)throw new GlobalException(沸羊羊你个臭傻逼);return clzEdit;}}然后在MusicBiz中添加以下代码 ListMap mapListPager(Bookxx bookxx, PageBean pageBean);
再在impl类中实现该接口
Overridepublic ListMap mapListPager(Bookxx bookxx,PageBean pageBean) {bookxx null;System.out.println(bookxx.getBook_name());return bookxxMapper.mapListPager(bookxx,pageBean);} 然后根据实现的方法在逆向生成的musicMapper中添加
ListMap mapListPager(Bookxx bookxx, PageBean pageBean);
bookxxMapper.xml /selectselect idmapListPager resultTypejava.util.Map parameterTypecom.xiaoxu.model.Bookxx selectinclude refidBase_Column_List /from t_hibernate_bookwhereif testbook_name ! nulland book_name like concat(%,#{book_name},%)/if/where
/select 测试 Jackson
定义 Jackson通常指代Jackson库它是一个用于处理JSON数据的流行Java库。Jackson库提供了一组API和工具用于将Java对象转换为JSON格式并提供了从JSON到Java对象的反向转换功能。 使用Jackson库你可以轻松地在Java应用程序中进行JSON的序列化和反序列化操作。它提供了各种功能和配置选项例如支持不同的数据绑定策略、处理复杂对象、处理日期和时间等等。Jackson广泛应用于Java Web应用、RESTful API开发和其他需要处理JSON数据的项目中。 总之Jackson是一个强大而灵活的Java库用于在Java应用程序中处理JSON数据。通过使用Jackson开发人员可以方便地进行JSON序列化和反序列化操作从而简化了与JSON数据的交互。 用法 使用Jackson需要在SpringMVC中添加Jackson依赖并配置JacksonMessageConverter。JacksonMessageConverter是SpringMVC中的一个消息转换器用于将Java对象转换为JSON数据和将JSON数据转换为Java对象。 Jackson还支持注解例如JsonProperty和JsonView可以帮助控制序列化和反序列化的行为。总的来说Jackson是一个强大的Java库可以使SpringMVC应用程序更方便地处理和传输数据。
常用注解 1. JsonFormat格式化输出日期类型的值 2. JsonInclude控制序列化过程中包含哪些属性 3. JsonIgnore忽略某些属性 4. JsonProperty指定属性的名称 5. JsonView根据视图序列化对象 6. JsonManagedReference和JsonBackReference解决对象循环引用的问题 7. JsonIdentityInfo为对象设置唯一标识 8. JsonTypeInfo序列化和反序列化时带上类型信息 9. JsonAutoDetect指定序列化和反序列化过程中哪些属性可见 10. JsonCreator定义一个构造函数用于反序列化 11. JsonAnyGetter和JsonAnySetter序列化和反序列化时动态处理属性 统一异常处理
为什么要全局异常处理 Java 中的全局异常处理是指在程序中统一处理所有的异常而不是在每个方法中单独处理异常。使用全局异常处理可以提高代码的可读性和可维护性减少代码冗余避免重复代码。此外全局异常处理可以将异常信息统一记录到日志中方便后续的问题排查和分析。如果不使用全局异常处理在出现异常时程序可能会直接终止用户体验也会受到影响。因此在 Java 中使用全局异常处理是一个好的编程实践。 异常处理思路 SpringMVC异常分类 1. 控制器方法异常当控制器方法抛出异常时SpringMVC会将异常信息包装成一个特殊的响应对象返回给客户端。 2. 数据转换异常当SpringMVC无法将请求参数转换成对应类型的数据时会抛出数据转换异常。 3. 数据验证异常当请求参数不符合预定的验证规则时会抛出数据验证异常。 4. 消息转换异常当SpringMVC无法将响应数据转换成客户端需要的类型时会抛出消息转换异常。 5. 文件上传异常当文件上传过程中出现问题时会抛出文件上传异常。 6. MVC配置异常当SpringMVC配置出现问题时会抛出MVC配置异常。 7. 未处理的异常当SpringMVC中出现未处理的异常时会抛出未处理的异常。 综合案例
异常处理方式一
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 新建一个errpr.jsp用来展示异常效果
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
错误信息页面。。。。。。。。。。。。。。
hr
${ex}
hr
${msg}
/body
/html然后造一个错误数据 RequestMapping(/list)public ListBookxx list(HttpServletRequest req, Bookxx bookxx){PageBean pageBean new PageBean();pageBean.setRequest(req);ListBookxx lst this.bookxxBiz.selectPage(bookxx, pageBean);System.out.println(1 / 0);return lst;}
测试 异常处理方式二
首先在异常包中定义一个全局异常的类 异常类代码
package com.xiaoxu.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.xiaoxu.component;import com.xiaoxu.exception.GlobalException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;
import java.util.Map;//ControllerAdvice
public class GlobalExceptionResolver {// 返回错误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;}
}
测试 异常处理方式三
注前两种异常不可同时使用。
定义一个新的异常处理方法
// 返回错误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;}