SpringMVC详解(六)------与json交互

  Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛。那么这篇博客我们主要谈谈在 SpringMVC 中,如何对 json 数据格式进行解析和转换?

  本篇博客源码链接:http://pan.baidu.com/s/1kURnwDx 密码:b37t

1、两种交互模式

  

  上图显示了客户端请求数据的两种格式,一种是 直接请求 json 数据,另一种是 key/value 数据。但是不管请求是哪种数据,为了在前端页面方便对结果进行解析。最终我们都转换为 json 数据格式。

2、导入相应的 jar 包(详情参看源码)

  

3、在 springmvc.xml 文件中配置 json 转换器

  第一种方法:

<mvc:annotation-driven ></mvc:annotation-driven>

  第二种方法:

<!-- 用于将对象转换为 JSON  -->
<bean id="stringConverter"
    class="org.springframework.http.converter.StringHttpMessageConverter">
    <property name="supportedMediaTypes">
        <list>
            <value>text/plain;charset=UTF-8</value>
        </list>
    </property>
</bean>
<bean id="jsonConverter"   class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  

<bean      class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="stringConverter" />
            <ref bean="jsonConverter" />
        </list>
    </property>
</bean>

  

4、请求为 json 数据测试

  这里我们需要注意两个注解:

  @ResponseBody把后台pojo转换json对象,返回到页面。

  @RequestBody接受前台json数据,把json数据自动封装pojo。

  ①、jsp 页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC和 json 交互</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-2.1.4.min.js" ></script>
</head>
<script type="text/javascript">
	var dataJson = {
			‘username‘:‘Bob‘,
			‘sex‘:‘男‘
	};
	function requestJson(){
		$.ajax({
			type:"POST",
			url:"${pageContext.request.contextPath}/requestJson",
			//指定数据格式为 json
			contentType:"application/json;charset=UTF-8",
			data:JSON.stringify(dataJson),
			dataType:"json",
			success:function(data){
				console.log(data.username);
				console.log(data.sex);
			}
		});
	}

</script>
<body>
	<button onclick="requestJson()" value="请求是json,返回json">请求是json,返回json</button>

</body>
</html>

  

  ②、Controller

package com.ys.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ys.po.User;

@Controller
public class UserController {

	//请求为json,返回json
	@RequestMapping("/requestJson")
	//@RequestBody将请求信息的json串转成user对象
	//@ResponseBody将user对象转成json输出
	@ResponseBody
	public User requestJson(@RequestBody User user) throws Exception{
		System.out.println(user);
		return user;//由于@ResponseBody注解,将user转成json格式返回
	}

}

  ③、测试

  我们访问上面的jsp页面,然后点击按钮,进入到 Controller

  

  然后我们查看返回的数据:

  

5、请求为 key/value 数据测试

  ①、JSP 页面

  ②、Controller

//请求为key/value,返回json
	@RequestMapping("/requestKeyValue")
	//@RequestBody将请求信息的json串转成user对象
	@ResponseBody
	public User requestKeyValue(User user) throws Exception{
		System.out.println(user);
		return user;
	}

  ③、测试

  

  然后返回数据:

  

6、遇到的问题

  ①、如下代码,由于我们使用 Ajax 提交,我们在 JSP 页面引入了jquery  文件,发现无论使用绝对路径还是相对路径,系统总是找不到这个文件?

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-2.1.4.min.js" ></script>

  原因:因为你在web.xml 文件中,对于过滤器的配置是拦截所有请求。所以类似于*.js,或者*.css这样的文件也被拦截了,故访问不到。

  

  解决办法:

    第一种办法:我们可以使用上面配置的拦截器只拦截 *.do,或者*.action,而不是 “/”。那么SpringMVC容器将不会拦截*.js,*.css这样的文件。但是这种风格不支持 Restful,建议不采用。

    第二种方法:在web.xml中配置拦截器的过滤请求

<!--要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了,我想性能是最好的吧。-->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

    第三种方法:在spingmvc.xml 中配置对静态资源不过滤

<!-- 配置静态文件过滤器 -->
	<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
	<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>

  

  ②、也是比较容易犯的错误 415

  

  

  这个错误产生的原因有很多。我们需要一步一步的排查:

  第一步:必须保证导入的 jackson相关的jar包是全的。

  第二步:在springmvc.xml文件中的配置的json转换器一定不能缺少,如何配查看本篇博客的第三点

  第三步:书写 Ajax 请求时。contentType:"application/json;charset=UTF-8",不要不写 contentType 这个属性

  第四步:Ajax传给后台的不要直接传字符串,要转换成json,即 data:JSON.stringify(dataJson),

时间: 2024-08-08 10:43:01

SpringMVC详解(六)------与json交互的相关文章

Animation动画详解(六)——ValueAnimator高级进阶(二)

前言:人生总有不平时,无论何时,不后悔就好. 相关文章: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法>2.<Animation动画详解(二)--Interpolator插值器>3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画>4.<Animation动画详解(四)--ValueAnimator基本使用&

SpringMvc详解

一Spring mvc是什么 二Spring mvc运行流程架构 三组件说明 1DispatcherServlet前端控制器 2HandlerMapping处理器映射器 3Handler处理器 4HandlAdapter处理器适配器 5ViewResolver视图解析器 四框架搭建流程 1导入相关架包本处不阐述 2配置前端控制器DispatcherServlet在WEB-INFwebxml中配置前端控制器 3配置处理器映射器HandlerMapping和处理器适配器HandlerAdapter注

Java构造和解析Json数据的两种方法详解二——org.json

转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法示例.       用json-lib构造和解析Json数据的方法详解请参见我上一篇博文:Java构造和解析Json数据的两种方法详解一 一.介

android动画详解六 XML中定义动画

动画View 属性动画系统允许动画View对象并提供很多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,因为View本身没有要操控的属性.结果就是View被动画了,但View对象本身并没有变化.在Android3.0中,新的属性和相应的getter和setter方法被加入以克服此缺点. 属性动画系统可以通过改变View对象的真实属性来动画Views.而且,View也会在其属性改变时自动调用invalidate()方法来刷

[转]springMVC详解

SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet> <servlet-name>springmvc</servlet

SpringMVC 详解

一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet> <servlet-name>spr

SpringMVC详解(二)------详细架构

目录 1.SpringMVC 详细介绍 2.SpringMVC 处理请求流程 3.配置前端控制器 4.配置处理器适配器 5.编写 Handler 5.配置处理器映射器 6.配置视图解析器 7.DispatcherServlet.properties 通过上篇博客,我们能编写一个 SpringMVC 的入门实例,但是为什么要这样写?这样写有啥好处?通过这篇博客我们会有详细的了解. 本篇博客源码下载链接:http://pan.baidu.com/s/1boOfxlP 密码:bxq4 回到顶部 1.S

Spring框架:SpringMVC详解

SpringMVC的工作流程.最先接触到请求的是DispatcherServlet,它会将请求根据配置文件转发到控制器,控制器返回视图名称和一个Model表示处理结果.DispatcherServlet再将处理结果发送给视图模板引擎,由它进行页面的渲染.下图是整个过程. 基本配置 声明servlet.首先要在web.xml中声明Spring的Servlet,代码如下: <servlet> <servlet-name>spring</servlet-name> <s

SpringMVC详解(五)------参数绑定

参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢?下面我们来详细的讲解. 1.SpringMVC 参数绑定 在 SpringMVC 中,提交请求的数据是通过方法形参来接收的.从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参. 这里