很简单的一个东西,这里就不做过多介绍了,写一个小Demo,随手记录下。

首先,在搭好SpringMVC工程环境之后,如果想用Spring自带的Json,需要额外的添加2个JAR包:

1、jackson-core-asl-1.9.9.jar

2、jackson-mapper-asl-1.9.9.jar

我这里使用的是Maven,也相对应的给出pox.xml

         <dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
<version>1.8.1</version>
</dependency> <dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.8.1</version>
</dependency>

当然也可以不使用Spring自带的Json,还有很多第三方的Json支持包,比如谷歌的Gson,都是很好用的东西。

关于Gson的使用,之前的文章里也有做介绍,请戳:《Gson简要使用笔记http://www.cnblogs.com/lichenwei/p/3987429.html

好了,进入正题,要使用Spring自带的Json,需要在SpringMVC配置文件里做一些配置:

     <!-- 处理在类级别上的@RequestMapping注解 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<!-- 处理在方法级别上的@RequestMapping注解 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 默认是ISO-88859-1,避免乱码这里设置为UTF-8 -->
<value>
text/html;charset=UTF-8
</value>
</list>
</property>
</bean>
<!-- 启动JSON格式的配置 -->
<bean id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<!-- 解决 HttpMediaTypeNotAcceptableException: Could not find acceptable
representation -->
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>

有了以上的配置之后,我们只需要在对应处理AJAX请求的方法上加上注解@ResponseBody,这样Spring就会帮我们把内容或对象作为HTTP响应的正文返回,会跳过视图处理部分,而调用适合HttpMessageConverter,将返回值(对象、字符串、List集合等)写入输出流。

SpringMVC的用法这里就不再多说了,直接给出关键代码:

    //向页面直接输出Json字符串
@ResponseBody
@RequestMapping(value="/showUser",params="json",produces="application/json")
public User showUserJson(){
User user=userService.getUserById(1);//获取数据库的一条信息
return user;
}

@RequestMapping

value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

params: 指定request中必须包含某些参数值,才让该方法处理。

看一下页面输出:

怎么样?相比Struts2输出Json要简单的多吧,少去了很多配置和通配符的设定。

再来看一下和AJAX的配合使用,服务端的代码依旧如上,然后我们写一个JSP页面进行测试

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<html>
<head>
<script type="text/javascript" src="<%=basePath %>js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#send").click(function(){
$.ajax({
type:"get",
url:"<%=basePath %>userController/showUser?json",
dataType:" json",
success:function(data){
alert(data);
}
});
});
});
</script>
</head>
<body>
<h3>点击下面按钮,输出Json信息</h3>
<input type="button" id="send" name="send" value="获取json信息">
</body>
</html>

这里要提到一个注意事项,我们在整合SpringMVC的时候需要在web.xml进行对DispatcherServlet的配置

     <!-- SpringMVC配置 -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

如果你配置DispatcherServlet拦截*.do就不会存在静态资源访问的问题,

但如果你和我一样配置DispatcherServlet拦截 / (所有),那么对*.js,*.css,*.jpg等资源的访问也就被拦截了,也就访问不到了。

这里顺带说下解决方法:

激活Tomcat的defaultServlet来处理静态文件

 <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

每种文件类型都要配置,要写在DispatcherServlet的前面, 让defaultServlet先拦截,这个就不会进入Spring了。

看下实现效果:

关于SpringMVC Json使用的更多相关文章

  1. springMVC+json构建restful风格的服务

    首先.要知道什么是rest服务,什么是rest服务呢? REST(英文:Representational State Transfer,简称REST)描写叙述了一个架构样式的网络系统.比方 web 应 ...

  2. springmvc+json

    1.在写我的springmvc demo时,由于要向前台返回相关信息,于是设置了@ResponseBody,但是要把对象转换成json格式,我却没有在xml文件里配置,所以报如下错误:HttpMedi ...

  3. SpringMvc Json LocalDateTime 互转,form urlencoded @ModelAttribute 转换

    JDK8 的LocalDate 系列日期API ,比Date 或者 Calendar 都好用很多,但是在SpringMvc 自动装配会有点小问题 会导致抛出类似异常 default message [ ...

  4. 关于springmvc json交互产生的406错误

    产生错误的背景:springmvc使用<mvc:annotation-driven>进行配置,那么只要引入响应的json解析包就可以了.在pom中已经引入了如下: <dependen ...

  5. SpringMVC JSON数据交互

    本节内容: @RequestBody @ResponseBody 请求json,响应json实现 前端可以有很多语言来写,但是基本上后台都是java开发的,除了c++(开发周期长),PHP和#Net( ...

  6. SpringMVC -- 梗概--源码--壹--springMVC json处理

    附:实体类 Class : User package com.c61.entity; import java.text.SimpleDateFormat; import java.util.Date; ...

  7. springMvc json 参数

    以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一 ...

  8. springmvc json字符串转化成json对象

    问题出现在 :页面数据列表的展示出现 [object HTMLInputElement] 找到问题的所在原因后又三种解决方案 一:格式化json字符串为json对象字符串 success:functi ...

  9. SpringMvc JSON 406,吐血。。。。

    解决方法一: 1.导入jackson-core-2.5.1.jar和jackson-databind-2.5.1.jar 2.Spring配置文件添加: 1 spring3为:org.springfr ...

随机推荐

  1. 基于jquery地图特效全国网点查看代码

    基于jquery地图特效全国网点查看代码.这是一款简单实用的jQuery地图特效,主要知识点是jquery和css实现了中图地图,提示层效果.效果图如下: 在线预览   源码下载 实现的代码. htm ...

  2. 基于jQuery遮罩图片hover翻转效果

    基于jQuery遮罩图片hover翻转效果.这是一款基于jQuery+css3实现的鼠标经过遮罩图片翻转特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div cla ...

  3. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  4. 【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

    原文链接:http://www.myexception.cn/linux-unix/1622052.html [linux]提示"libc.so.6: version `GLIBC_2.14 ...

  5. [转]关于重定向RedirectAttributes的用法

    刚才做项目的时候看到一篇写的很不错的博客,解决我之前对于RedirectAttributes的困惑,也给大家推荐下~ 原文地址https://zhuanlan.zhihu.com/p/21353217 ...

  6. Java 开发中的对象拷贝

    前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...

  7. Redis初步认识

    官网:redis.io Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的 ...

  8. 设置一个按钮为一个图片,不要border

    //设置一个按钮为一个图片,不要border ImageIcon searchIcon = ImageToolkit.loadImageIcon(/search.png"); ImageIc ...

  9. Centos 5.2 下配置 php 的 json 扩展

    01.下载源文件包:   wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.1.tar.bz2 02.解压文件包:   tar ...

  10. C程序模拟实现银行家算法

    C程序模拟实现银行家算法 上周又做操作系统实验,题目是用程序模拟实现银行家算法,写了半天还真有点晕,主要是因为想尽可能符合课本上的描述,所以写出来的程序就比较恶心了,好了,银行家算法就不多说了,不了解 ...