前台使用ajax,后台 springMVC

Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。

jackson库作用:(1)在前台传的json格式的字符串格式数据,后台可以用相关的类,Map,List来接收(如果不用jackson库,但后台却使用了除string类型之外的类型来接收json格式数据,则后台报错 Content type 'application/json' not supported);

(2) 如果使用了jackson库,后台返回给前台的数据类型可以是Map,相关类,List等,JACKSON库会自动将类型转换为json字符串给前台,如果不使用,则会报 convert 错

一、准备工作

首先去官网下载Jackson工具包,下载地址http://wiki.fasterxml.com/JacksonDownload。Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3个jar包需要下载:

jackson-core-2.2.3.jar(核心jar包,下载地址

jackson-annotations-2.2.3.jar(该包提供Json注解支持,下载地址

jackson-databind-2.2.3.jar(下载地址

  1. //JSON序列化和反序列化使用的User类
  2. import java.util.Date;
  3. public class User {
  4. private String name;
  5. private Integer age;
  6. private Date birthday;
  7. private String email;
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public Integer getAge() {
  15. return age;
  16. }
  17. public void setAge(Integer age) {
  18. this.age = age;
  19. }
  20. public Date getBirthday() {
  21. return birthday;
  22. }
  23. public void setBirthday(Date birthday) {
  24. this.birthday = birthday;
  25. }
  26. public String getEmail() {
  27. return email;
  28. }
  29. public void setEmail(String email) {
  30. this.email = email;
  31. }
  32. }

二、JAVA对象转JSON[JSON序列化]

  1. import java.io.IOException;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. public class JacksonDemo {
  6. public static void main(String[] args) throws ParseException, IOException {
  7. User user = new User();
  8. user.setName("小民");
  9. user.setEmail("xiaomin@sina.com");
  10. user.setAge(20);
  11. SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
  12. user.setBirthday(dateformat.parse("1996-10-01"));
  13. /**
  14. * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
  15. * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
  16. * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
  17. * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
  18. * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
  19. * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
  20. */
  21. ObjectMapper mapper = new ObjectMapper();
  22. //User类转JSON
  23. //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}
  24. String json = mapper.writeValueAsString(user);
  25. System.out.println(json);
  26. //Java集合转JSON
  27. //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]
  28. List<User> users = new ArrayList<User>();
  29. users.add(user);
  30. String jsonlist = mapper.writeValueAsString(users);
  31. System.out.println(jsonlist);
  32. }
  33. }

三、JSON转Java类[JSON反序列化]

  1. import java.io.IOException;
  2. import java.text.ParseException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. public class JacksonDemo {
  5. public static void main(String[] args) throws ParseException, IOException {
  6. String json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"xiaomin@sina.com\"}";
  7. /**
  8. * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
  9. */
  10. ObjectMapper mapper = new ObjectMapper();
  11. User user = mapper.readValue(json, User.class);
  12. System.out.println(user);
  13. }
  14. }

四、JSON注解(@JsonProperty 只在mapper.writeValueAsString(序列化) mapper.readValue(反序列化)有用)

Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。

@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。

@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 加入timezone,解决时间慢8小时

  1. "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
  2. "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  3. "EEE,ddMMMyyyyHH:mm:sszzz"
  4. "yyyy-MM-dd"

当实体中存在Date类型,但是json字符串中是字符串类型

pattern 只支持以上几种格式否则报错

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。

    1. import java.util.Date;
    2. import com.fasterxml.jackson.annotation.*;
    3. public class User {
    4. private String name;
    5. //不JSON序列化年龄属性
    6. @JsonIgnore
    7. private Integer age;
    8. //格式化日期属性
    9. @JsonFormat(pattern = "yyyy年MM月dd日")
    10. private Date birthday;
    11. //序列化email属性为mail
    12. @JsonProperty("mail")
    13. private String email;
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. public Integer getAge() {
    21. return age;
    22. }
    23. public void setAge(Integer age) {
    24. this.age = age;
    25. }
    26. public Date getBirthday() {
    27. return birthday;
    28. }
    29. public void setBirthday(Date birthday) {
    30. this.birthday = birthday;
    31. }
    32. public String getEmail() {
    33. return email;
    34. }
    35. public void setEmail(String email) {
    36. this.email = email;
    37. }
    38. }
    39. import java.io.IOException;
    40. import java.text.ParseException;
    41. import java.text.SimpleDateFormat;
    42. import com.fasterxml.jackson.databind.ObjectMapper;
    43. public class JacksonDemo {
    44. public static void main(String[] args) throws ParseException, IOException {
    45. User user = new User();
    46. user.setName("小民");
    47. user.setEmail("xiaomin@sina.com");
    48. user.setAge(20);
    49. SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
    50. user.setBirthday(dateformat.parse("1996-10-01"));
    51. ObjectMapper mapper = new ObjectMapper();
    52. String json = mapper.writeValueAsString(user);
    53. System.out.println(json);
    54. //输出结果:{"name":"小民","birthday":"1996年09月30日","mail":"xiaomin@sina.com"}
    55. }
    56. }

springMVC中jackson的使用(包含JsonFormat 时间格式)的更多相关文章

  1. SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析

    SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...

  2. SpringCloud:feign默认jackson解析'yyyy-MM-ddTHH:mm:ssZ'时间格式报错

    Feign默认的使用jackson解析,所以时间传值时会报错,时间格式错误 解决办法: 修改feign解析方式为fastjson方式: @Configuration public class CxfC ...

  3. ASP.Net 获取当前时间,包含各种时间格式

    在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间 ...

  4. golang中time包一个简单的时间格式输出

    一.代码 package main import ( "fmt" "time" ) func main() { //"2006-01-02 15:04 ...

  5. C#中Newtonsoft.Json 序列化和反序列化 时间格式

    步骤 引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; 格式配置 IsoDateTimeConverter timeFormat ...

  6. hive笔记:时间格式的统一

    一.string类型,年月日部分包含的时间统一格式: 原数据格式(时间字段为string类型) 取数时间和格式的语法  2018-11-01 00:12:49.0 substr(regexp_repl ...

  7. 一起Polyfill系列:让Date识别ISO 8601日期时间格式

    一.什么是ISO 8601日期时间格式 ISO 8601是国际标准化组织制定的日期时间表示规范,全称是<数据存储和交换形式·信息交换·日期和时间的表示方法>. 示例: 1. 2014-12 ...

  8. lua 特殊时间格式转换

    [1]时间格式转换需求 工作中,因业务需要将时间格式进行转换.需求内容如下: 原格式:17:04:49.475  UTC Mon Mar 04 2019 转换格式:2019-03-04 17:04:4 ...

  9. SpringMVC使用@ResponseBody时返回json的日期格式及可能产生的问题

    http://blog.csdn.net/z69183787/article/details/40375831 遇到的问题: 1 条件: 1.1.表单里有两个时间参数,都是作为隐藏项随表单一起提交: ...

随机推荐

  1. python os.system重定向stdout到变量 ,同时获取返回值

    Python执行系统命令的方法 os.system(),os.popen(),commands 最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类. 最开始的时候 ...

  2. 面试题:sql数据查询

    前几天参加一个面试,面试公司让做一套题,sql题不是很难,但是我第一次还是写错了,回来后,重新写了下.简单记录下吧, 1.题目: 2.测试数据 select * from student ; inse ...

  3. cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示

    今天遇到一个问题: 一个python脚本命令行运行时很正常,放到crontab中就无法工作,日志也没有记录,找了半天,终于发现问题所在. 在脚本最上方,程序如下: #!/usr/local/bin p ...

  4. rpm 命令|rpm 安装|rpm 卸载|rpm 使用|rpm 删除

    在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM) ...

  5. c语言中#和##的用法

    一.一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include<cstdio> #include<climits> using nam ...

  6. 用spin和edit控件来用spin控制edit里面小数的增减

    1.响应SPIN的消息,就是点SPIN的上键头和下键头的消息,在这个消息里改变值是以0.1步进量增减.2.使用UpdateData(FALSE)来更新EDIT的关联的double型的变量. 创建步骤 ...

  7. Android 跨应用调用Activity

    http://blog.csdn.net/ouyangliping/article/details/7972141 如何调用另外一个app应用的activity或者service,本文提供一个验证可行 ...

  8. [Xcode 实际操作]三、视图控制器-(1)使用UIScrollView展示多个视图可控制器

    目录:[Swift]Xcode实际操作 本文将演示使用滚动视图创建多个页面. [Create a new Xcode project]->[Single View App]->[Next] ...

  9. [Xcode 实际操作]九、实用进阶-(16)给图片添加水印效果

    目录:[Swift]Xcode实际操作 本文将演示如何截取屏幕画面,并将截取图片,存入系统相册. 在项目文件夹[DemoApp]上点击鼠标右键 ->[New File]创建一个扩展文件-> ...

  10. Java常见设计模式学习(非原创)

    文章大纲 一.策略模式二.观察者模式三.工厂模式四.单例模式五.其他模式六.设计模式总结七.参考文章   一.策略模式 现在假设我们有个"鸭子项目",首先我们用OOP(面向对象)的 ...