SpringMVC高级开发功能实现过程解析

 更新时间:2020年06月19日 14:47:55   作者:64Byte  
这篇文章主要介绍了SpringMVC高级开发功能实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一. 全局的异常处理器

1、编写一个自定义的异常类, 区分哪些异常是系统异常, 哪些异常是用户不正当操作的异常

//继承Exception
public class UserException extends Exception{

  private static final long serialVersionUID = -8469276157483476569L;

  public UserException() {
    super();
  }

  public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
    super(message, cause, enableSuppression, writableStackTrace);
  }

  public UserException(String message, Throwable cause) {
    super(message, cause);
  }

  public UserException(String message) {
    super(message);
  }

  public UserException(Throwable cause) {
    super(cause);
  }

2、编写一个全局异常处理器, 这个处理器必须实现HandlerExceptionResolver

//将异常处理类交给spring容器管理
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
  @Override
  public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
      Exception ex) {
    // ex 接收是抛出的异常对象
    // 分类处理, 自定义异常, 直接响应 错误信息
    // 系统异常, 响应的: 系统错误, 请联系管理员
    ModelAndView modelAndView = new ModelAndView();if (ex instanceof UserException) {//用户异常
      modelAndView.addObject("error", ex.getMessage());
    } else {//系统异常
      modelAndView.addObject("error", "系统错误,联系管理员!!!");
    }
    modelAndView.setViewName("error");
    return modelAndView;
  }

3、 在springMVC的配置文件中配置全局的异常处理器

①使用Component ②在springmvc配置文件中手动添加<bean/>

4、扫描这个exception包中的注解

二、响应json支持

  AJAX: 要求后台响应的是数据, 后台重定向,转发到一个页面, 把这个页面当成一个数据,响应给ajax,

后台: java对象

前台: ajax--> js对象, 使用json, 需要后台把java对象转换为json格式的字符串,

  Servlet: 使用 json-lib, 手动调用JSONObject

  SpringMVC转换json, 使用: 1)jackson *** 2) fastjson

1、导入jackson的依赖: 注意添加完把<type>bundle</type>删除,会附带导入所需要的jar

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.10.0</version>
</dependency>

  Controller方法的返回值 java对象, 需要配合@ResponseBody, 把方法的返回值作为数据响应给前端, ****

  如果是一个java对象,而且导入json的相关依赖(jaskson/fastJson), 调用转换器, 把java对象转换为json格式字符串响应给前端

把日期转换为 指定格式的字符串

@DateTimeFormat(pattern = "yyyy-MM-dd") // SpringMVC的注解, 把前端的字符串转换为Date
@JsonFormat(pattern = "yyyy-MM-dd") // jackson的注解, 把Date转换为json指定格式的字符串

@JsonFormat(pattern = "yyyy-MM-dd")

private Date brithday;[/code]

忽略某个属性转换为json

@JsonIgnoreprivate String password;

@RequestBody:主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),只能是post提交,get没有请求体

注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。

//前端发送json, 响应json
@RequestMapping("/queryUserByCondition.action")
@ResponseBody
public User  queryUserByCondition( @RequestBody User user) throws Exception{
  return user;
}

前端代码

//请求的是json
    function requestJson(){
      //请求参数是json
      // 默认情况下, data中json, 变成js对象, 变成key/value
      //contentType:"application/json;charset=utf-8", 改为json 格式的传输
      $.ajax({
      url:"${pageContext.request.contextPath }/user/queryUserByCondition.action",
      type:"post",
      //data:"id=2&username=张三&sex=男&brithday=1999-12-21",
      contentType:"application/json;charset=utf-8", 
      data:'{"id":3,"username":"李四","sex":"男","brithday":"2012-12-12"}',
      success:function(rs){
        alert(rs.username+"-->"+rs.sex); // json 字符串转换为js对象
      },
      dataType:"json"
        });
    }

三、文件上传

1、对页面的要求:

form 的method:postform的enctype: 默认值: application/x-www-form-urlencoded 一定设置为: multipart/form-data使用<input type=”file”> 选择文件

2、对页面的要求:

  导入文件上传的依赖: commons-fileupload commons-io

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.4</version>
</dependency>

3、在springMVC配置文件上传的解析器

<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 <!-- 设置最大的上传文件大小 :10M-->
<property name="maxUploadSize" value="10485760"></property>
</bean>

注意:bean的id一定为multipartResolver,否则获取不到数据

4、文件代码

@PostMapping("/addUser.action")
  public String addUser(User user, MultipartFile photo,Model model) throws Exception{
    if(photo == null) {
      throw new UserException("请选择图片");
    }else {
      //保存文件
      String savePath = "D:\\upload";
      //File类
      File pathFile = new File(savePath);
      if(!pathFile.exists()) {
        //创建文件夹
        pathFile.mkdirs();
      }
      //文件名取名: 时间戳   UUID 
      //获取上传文件的后缀名
      String uploadFileName = photo.getOriginalFilename();
      String suffix = uploadFileName.substring(uploadFileName.lastIndexOf("."));
      String saveFilename = UUID.randomUUID().toString().replace("-", "").toUpperCase()+suffix;
      //保存
      photo.transferTo(new File(savePath,saveFilename));
      //给user对象的photoPath属性赋值
      user.setPhotoPath(saveFilename);
      
      //调用业务层,保存用户
      userService.saveUser(user);
      model.addAttribute("msg", "保存成功");
    }
    return "msg";
  }

  <img src="/img/${user.photoPath }"/>

需要在tomcat中配置映射路径

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • springboot中使用redis的方法代码详解

    springboot中使用redis的方法代码详解

    &#8203;redis 作为一个高性能的内存数据库,如果不会用就太落伍了,之前在 node.js 中用过 redis,本篇记录如何将 redis 集成到 spring boot 中。感兴趣的朋友跟随小编一起看看吧
    2019-05-05
  • Json字符串转Java对象和List代码实例

    Json字符串转Java对象和List代码实例

    这篇文章主要介绍了Json字符串转Java对象和List代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot整合Spring Security过滤器链加载执行流程源码分析(最新推荐)

    SpringBoot整合Spring Security过滤器链加载执行流程源码分析(最新推荐)

    Spring Boot 对于 Spring Security 提供了自动化配置方案,可以使用更少的配置来使用 Spring Security,这篇文章主要介绍了SpringBoot整合Spring Security过滤器链加载执行流程源码分析,需要的朋友可以参考下
    2023-02-02
  • SpringBoot生成PDF的五种实现方法总结

    SpringBoot生成PDF的五种实现方法总结

    这篇文章主要介绍了SpringBoot生成PDF的五种实现方法,在开发中经常会遇到需要进行对一些数据进行动态导出PDF文件,然后让用户自己选择是否需要打印出来,这篇文章我们来介绍五种实现方法,需要的朋友可以参考下
    2024-10-10
  • java版数独游戏核心算法(一)

    java版数独游戏核心算法(一)

    这篇文章主要为大家详细介绍了java版数独游戏的核心算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • dom4j创建和解析xml文档的实现方法

    dom4j创建和解析xml文档的实现方法

    下面小编就为大家带来一篇dom4j创建和解析xml文档的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • C++/java 继承类的多态详解及实例代码

    C++/java 继承类的多态详解及实例代码

    这篇文章主要介绍了C++/java 继承类的多态详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java编程实现比对两个文本文件并标记相同与不同之处的方法

    Java编程实现比对两个文本文件并标记相同与不同之处的方法

    这篇文章主要介绍了Java编程实现比对两个文本文件并标记相同与不同之处的方法,涉及java针对文本文件的读取、遍历、判断等相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • 关于Java中XML Namespace 命名空间问题

    关于Java中XML Namespace 命名空间问题

    这篇文章主要介绍了Java中XML Namespace 命名空间,XML命名空间是由国际化资源标识符 (IRI) 标识的 XML 元素和属性集合,该集合通常称作 XML“词汇”,对XML Namespace 命名空间相关知识感兴趣的朋友一起看看吧
    2021-08-08
  • java高并发ScheduledThreadPoolExecutor与Timer区别

    java高并发ScheduledThreadPoolExecutor与Timer区别

    这篇文章主要为大家介绍了java高并发ScheduledThreadPoolExecutor与Timer区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论