springMVC(六)json请求和json响应

首先我们先实现一次key\value请求,然后在实现json请求,响应都使用json格式。

需求:根据学院id查询学院信息。

前端页面实现:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-3.2.1.min.js"></script>
</head>

<body>
<input type="button" id="uid" />
<script>
    $("#uid").click(function(){
        //取Ajax返回结果
        //为了简单,这里简单地从文件中读取内容作为返回数据
        $.ajax({
            type: "post",
            url: "${pageContext.request.contextPath}/faculty/selectFacultyById3.action",
            dataType : "json",
            success: function (data)
            {
                var result =  eval(data);
                alert(result.facultyId);
                $("#hh").append("<p>学院编号:"+result.facultyId+" 学院名称:"+result.facultyName+"</p>");
            },
            error:function (XMLHttpRequest,textStatus,errorThrown) {
                alert("请求失败!");
            }
        });
    });
</script>
    <h1 id="hh">将内容添加到h1,里面作为子元素:<p id="list"></p></h1>

</body>
</html>

controller层

这里发过来的是普通请求,当然因为方便,我直接设置了defaultValue。json响应只需要用注解@ResponseBody修饰即可。(啊喂,你别告诉我处理json的包还没导入进来这是我从其他地方复制的)

<!-- 映入JSON -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.1</version>
      <classifier>jdk15</classifier>
    </dependency>

controller具体实现:

    @RequestMapping("/selectFacultyById3.action")
    public @ResponseBody Faculty selectFacultyById3(@RequestParam(value = "facultyCustom.facultyId",defaultValue = "1") Integer facultyId){
        Faculty faculty = facultyService.selectFacultyByFacultyId(facultyId);
        return faculty;
    }

测试:

image.png

查看响应的json数据:


image.png

解析出来的结果:


image.png

添加到页面的指定位置:


image.png

注意controller层返回结果就是你需要返回的json字符串,别用ModelAndView这种奇怪的东西~~~

请求方式json方式

这里遇到一个好大好大的坑:controller层接受json
一定要用对象!
不然参数绑定不上!!!!!!!
当然更不要用@RequestParam修饰Integer,String等包装类和对象。(如果请求类型不是json那就无所谓)

错误集锦:
使用包装类Integer
错误代码如下:

    @RequestMapping("/select.action")
    public @ResponseBody Faculty select(@RequestBody Integer facultyId){
        Faculty faculty = facultyService.selectFacultyByFacultyId(facultyId);
        return faculty;
    }

错误现象:


image.png

这种错误很难察觉,一般都会认为路径存在问题,无论怎么改都是404-错误。。然后就会想清除缓存然后发现还是没用。就会写个普通的方法,却发现有用。一旦使用了@RequestBody就抽风。。。这就是我的测试步骤。。。。。(其实就是初学,对于接受参数不懂)


后记
之前发生错误的原因400,可以理解为参数绑定之类的错误,就是springmvc没有绑定成功导致错误。
解决方案一:
@RequestBody Map<String,String> map;
使用map接受参数
解决方案二:
使用对象,属性对应名字。


controller层


    @RequestMapping("/select.action")
    public @ResponseBody Faculty select(@RequestBody Faculty facultyTemp){
        Faculty faculty = facultyService.selectFacultyByFacultyId(facultyTemp.getFacultyId());
        return faculty;
    }

jsp页面
改动部分是contentType: "application/json",设置请求类型data : JSON.stringify(json)这是讲数组转为json对象。之前获取到的json用的是eval解析。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-3.2.1.min.js"></script>
</head>

<body>
<input type="button" id="uid" />
<script>
    $("#uid").click(function(){
        var json = {
            "facultyId": 2
        };
        $.ajax({
            type: "post",//post请求方式
            url: "${pageContext.request.contextPath}/faculty/select.action",
            contentType: "application/json",
            data : JSON.stringify(json),
            dataType : "json",//响应格式为json
            success: function (data)
            {
                var result =  eval(data);//处理json
                alert(result.facultyId);//测试处理结果
                $("#hh").append("<p>学院编号:"+result.facultyId+" 学院名称:"+result.facultyName+"</p>");//添加到指定位置
            },
            error:function (XMLHttpRequest,textStatus,errorThrown) {
                alert("请求失败!");
            }
        });
    });
</script>
    <h1 id="hh">将内容添加到h1,里面作为子元素:<p id="list"></p></h1>

</body>
</html>

测试结果:


image.png

请求内容:

image.png

响应内容:


image.png

springmvc就算是结束了。。。validate校验比较简单看后面会不会补充。


明天更新的内容是json,主要是因为json这个东西无论是前端人员,还是后端人员都需要处理json。那么明天我将会用jquery ajax对json进行一些操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,293评论 8 265
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生x阅读 15,967评论 3 119
  • 心里有点小纠心吧。昨日的你侬我侬,又突然间没正常联系了。感觉我就像一个用了就被丢弃在一旁的人。 你有点出息好不好。...
    鸟囚阅读 223评论 0 0
  • 第156章:造人 忙碌的工作总会让人觉得时间过得快。转眼就到了2010年2月初,再过几天又要过年了。 这期间,钱小...
    墨棠子阅读 1,377评论 18 43