Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 359|回复: 0

springmvc之响应json数据和接收json数据和异常处理

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-3 02:21:59 | 显示全部楼层 |阅读模式

    这里讲解的使用spring支持的第三方jar包的使用来处理json数据,不包括其他的方法。

    响应json数据:

    这里涉及了几种比较复杂的json数据的响应;

    第一步导包:

    第二步单纯的响应json数据:

     1 /**
     2  * 
     3  */
     4 package com.sxt.controller;
     5 
     6 import java.util.ArrayList;
     7 import java.util.Arrays;
     8 import java.util.HashMap;
     9 import java.util.List;
    10 import java.util.Map;
    11 
    12 import org.springframework.stereotype.Controller;
    13 import org.springframework.web.bind.annotation.RequestMapping;
    14 import org.springframework.web.bind.annotation.ResponseBody;
    15 /**
    16  * @author ASUS
    17  * 利用gson响应json数据
    18  *  
    19  *
    20  */
    21 
    22 import com.sxt.bean.User;
    23 @Controller
    24 public class MyController {
    25     /**
    26      * 响应一个map集合的数据转换成json
    27      * @return
    28      */
    29     @RequestMapping("/fun1")
    30     @ResponseBody
    31     public Map<String, Object> fun1(){
    32         Map<String, Object> map=new HashMap<>();
    33         map.put("id", 1);
    34         map.put("name", "张三");
    35         map.put("age", 20);
    36         map.put("address", "深圳尚学堂");
    37         return map;
    38     }
    39     /**
    40      * 响应一个list数据的
    41      * @return
    42      */
    43     @RequestMapping("/fun2")
    44     @ResponseBody
    45     public List<String> fun2(){
    46         System.out.println("------------");
    47         return Arrays.asList("深圳","广州","上海","北京");
    48     }
    49     @RequestMapping("/fun3")
    50     @ResponseBody
    51     public User fun3() {
    52         User user=new User();
    53         user.setUsername("ass");
    54         user.setPassword("122");
    55         return null;
    56     }
    57     @RequestMapping("/fun4")
    58     @ResponseBody
    59     public Map<String, Object> fun4(){
    60         Map<String, Object> map=new HashMap<>();
    61         map.put("total", 20);
    62         List<User> list = new ArrayList<>();
    63         for(int i =0;i<5;i++){
    64             User user = new User();
    65             user.setUsername("aaa"+i);
    66             user.setPassword("bbbb"+i);
    67             list.add(user);
    68         }
    69         map.put("rows", list);
    70         return map;
    71     }
    72     
    73 }

    上面的案例中还可以把@ResponseBody添加到类的头上,这表明该类就是一个专门的响应json数据的类

    二:接收json数据

    controller代码:

     1 /**
     2  * 
     3  */
     4 package com.sxt.controller;
     5 
     6 import org.springframework.stereotype.Controller;
     7 import org.springframework.web.bind.annotation.RequestBody;
     8 import org.springframework.web.bind.annotation.RequestMapping;
     9 import org.springframework.web.bind.annotation.ResponseBody;
    10 
    11 import com.sxt.bean.User;
    12 
    13 /**
    14  * @author ASUS
    15  * 获取请求的json数据
    16  *
    17  */
    18 @Controller
    19 public class RequestJson {
    20     @RequestMapping("/add")
    21     @ResponseBody
    22     public String add(@RequestBody User user) {
    23         System.out.println(user);
    24         return "/index.jsp";
    25     }
    26 }

    注意:这里多了一个注解;该注解能把请求的json数据自动转换成对象数据

    还可以用@RestController来代替@Controller和@ResponseBody的功能

    jsp页面代码:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     <%
     4 String path = request.getContextPath();
     5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
     6 %>
     7 <!DOCTYPE html>
     8 <html>
     9 <head>
    10  <base href="<%=basePath%>">
    11 <meta charset="UTF-8">
    12 <title>Insert title here</title>
    13 <script type="text/javascript" src="js/jquery.min.js"></script>
    14 </head>
    15 <body>
    16 <input type="button" value="提交数据" onclick="fun1();">
    17     <script type="text/javascript">
    18         function fun1() {
    19             $.ajax({
    20                 type : 'POST',
    21                 url : "add",
    22                 contentType : "application/json",
    23                 //如果想以json格式把数据提交到后台的话,这个必须有,否则只会当做表单提交
    24                 data : JSON.stringify({
    25                     "username" : "aaa",
    26                     "password" : "bbb"
    27                 }),//JSON.stringify()必须有,否则只会当做表单的格式提交
    28                 dataType : "json",//期待返回的数据类型
    29                 success : function(data) {
    30                     alert("success:" + data);
    31                 },
    32                 error : function(data) {
    33                     alert("error" + data);
    34                 }
    35             });
    36         }
    37     </script>
    38 </body>
    39 </html>

    注意:如果我们在接收json数据的时候加上@RequestBody这个注解,那么它会自动将请求的json数据转换到对象中

    在我们日常的开发中,404,500这类的错误异常信息屡见不鲜;这是因为在开发中的异常信息都被我们try-catch给处理掉了,所以当某一个出现问题的就会抛出这样的界面;

    这样给用户的体验很不好。在spring中有一个专门的异常处理器HandlerExceptionResolver,我们可以借助这个接口将错误的界面换成更好看的界面展示给客户。但是,这存在一个问题,也就是我们所有的异常必须往上抛,最后再controller中利用该接口展示给用户我们想让他们看到的界面。

    第一步:

    创建一个异常处理器实现HandlerExceptionResolver接口

    代码:

     1 /**
     2  * 
     3  */
     4 package com.sxt.controller;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 import org.springframework.stereotype.Component;
     9 import org.springframework.web.servlet.HandlerExceptionResolver;
    10 import org.springframework.web.servlet.ModelAndView;
    11 /**
    12  * @author ASUS
    13  * 自定义的全局异常处理器
    14  *
    15  */
    16 @Component
    17 public class MyHandleException implements HandlerExceptionResolver{
    18 
    19     /**
    20      * ex就是对应的抛出的按个异常
    21      */
    22     @Override
    23     public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
    24             Exception ex) {
    25         // TODO Auto-generated method stub
    26         System.out.println(ex);
    27         System.out.println(ex.getMessage());
    28         ModelAndView mc=new ModelAndView();
    29         mc.setViewName("/error.jsp");
    30         return mc;
    31     }
    32 
    33 }

    在controller中对异常进行展示:

     1 /**
     2  * 
     3  */
     4 package com.sxt.controller;
     5 
     6 
     7 
     8 import org.springframework.stereotype.Controller;
     9 import org.springframework.web.bind.annotation.RequestMapping;
    10 
    11 import com.sxt.bean.User;
    12 import com.sxt.exception.CustomException;
    13 /**
    14  * @author ASUS
    15  * 将异常全部抛出,最后再controller中有一个spring自带的异常处理器;如果不抛的话就没有办法知道这些异常
    16  * 用户就可能见到404这样的异常信息,为了更好地体验,我们将这样的错误界面换成更好看的,这在显示生活中很常见
    17  *
    18  */
    19 @Controller
    20 public class MyController {
    21     @RequestMapping("/update")
    22     public String update( User user) throws CustomException {
    23         System.out.println("------------");
    24         System.out.println(user);
    25         if("admin".equals(user.getUsername())) {
    26             throw new CustomException("系统维护,请稍后访问!!");
    27         }else if("root".equals(user.getUsername())) {
    28             throw new CustomException("类型出错了");
    29         }
    30         return "/user.jsp";
    31     }
    32     
    33 }

    自定义异常信息显示类:

     1 /**
     2  * 
     3  */
     4 package com.sxt.exception;
     5 
     6 /**
     7  * @author ASUS
     8  * 自定义异常类
     9  *
    10  */
    11 public class CustomException extends Exception{
    12 
    13     /**
    14      * 
    15      */
    16     private static final long serialVersionUID = 1L;
    17     private String message;
    18     public String getMessage() {
    19         return message;
    20     }
    21     public void setMessage(String message) {
    22         this.message = message;
    23     }
    24     @Override
    25     public String toString() {
    26         return "CustomException [message=" + message + "]";
    27     }
    28     
    29     public CustomException(String message) {
    30         super(message);
    31         this.message=message;
    32     }
    33     
    34 
    35 }

    错误界面代码:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     <%
     4 String path = request.getContextPath();
     5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
     6 %>
     7 <!DOCTYPE html>
     8 <html>
     9 <head>
    10  <base href="<%=basePath%>">
    11 <meta charset="UTF-8">
    12 <title>Insert title here</title>
    13 </head>
    14 <body>
    15 错误页面!!!
    16 </body>
    17 </html>

    配置文件信息:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
     7         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
     9     
    10     <!-- 开启注解 -->
    11     <mvc:annotation-driven ></mvc:annotation-driven>
    12     <!-- 开启扫描 -->
    13     <context:component-scan base-package="com.sxt.*"></context:component-scan>
    14    
    15     
    16 </beans>

    注意:这里使用的是注解的形式,如果在自定义异常处理器中没有使用注解,就要在spring-mvc.xml文件中配置异常处理器

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 12:04 , Processed in 0.116994 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表