博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把实体 转为json 数据格式---jackson 的详细用法.
阅读量:4677 次
发布时间:2019-06-09

本文共 3180 字,大约阅读时间需要 10 分钟。

下载:http://www.oschina.net/p/jackson

首先介绍三个注解:

@JsonAutoDetect (method/field):作用于方法或字段,用来表明,当生成json的时候忽略有该annotation的方法或字段

@JsonIgnore 过滤不需要转成json的属性

@JsonIgnoreProperties 主要用于过滤掉一些不需要的属性

以上三个注解需要放在get方法前面才有效.

package com.sw.entity.base;import static javax.persistence.GenerationType.IDENTITY;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.persistence.Transient;import org.codehaus.jackson.annotate.JsonAutoDetect;import org.codehaus.jackson.annotate.JsonIgnore;/** * Menu entity. @author MyEclipse Persistence Tools */@Entity@Table(name = "menu", catalog = "zhong")@JsonAutoDetectpublic class Menu implements java.io.Serializable {	// Fields	/**	 * 	 */	private static final long serialVersionUID = 1L;	private Integer id;	private Menu menu;	private String icon;	private String name;	private Short seq;	private String url;	private String prem;	private Set
menus = new HashSet
(0); // Constructors /**用于json输出的属性,不需要持久化;*/ private String state = "open"; /*********************************/ /** default constructor */ public Menu() { } /** minimal constructor */ public Menu(Integer id) { this.id = id; } /** full constructor *///省略构造器 // Property accessors/**省略了一下不需要处理的get/set方法*/ @JsonIgnore //标记该属性不需要转为 json @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid") public Menu getMenu() { return this.menu; } public void setMenu(Menu menu) { this.menu = menu; } @JsonIgnore //标记该属性不需要转为 json @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "menu") public Set
getMenus() { return this.menus; } public void setMenus(Set
menus) { this.menus = menus; } /*jackson就是根据get方法来获取属性值的,如果持久化的属性值不符合你的要求,可以通过更改get方法来实现。比如说你的实体里有个set
xxx;的属性,如果按照jackson原本的计划,集合类型会被转为json数组,但你想把这个集合的内容转成字符串,那么就可以通过get方法返回字符。或者说按照你的要求返回任何东西。*/ //这个是为了树形结构菜单标记字段,加上此注解表示该字段不需要持久化实体到数据库 @Transient public String getState() { if(this.getMenus()==null){ state = "open"; }else{ state = "closed"; } return state; } public void setState(String state) { this.state = state; } }

  以下是转化代码:

List<Menu> menus = menuManager.getChildrenById(aid,"pid","seq",true); //从数据库取出list

ObjectMapper map = new ObjectMapper();//这是jackson的类库
map.writeValue(Struts2Utils.getResponse().getWriter(),menus); //输出json 这样就把json数据输出到浏览器客户端了。

 

以下是值:

[{"name":"dfdsf","id":1,"state":"closed","seq":999,"prem":"fsfsd","icon":"fff","url":"gfdsfds"}, {"name":"fdsfds","id":2,"state":"closed","seq":999,"prem":"fsdf","icon":"fff","url":"efdsfsd"}]
jackson常用转化形式: writeValueAsString(value) 转化为String writeValueAsBytes(value) 转化为byte writeValue(objec0,bean) 此方法用于直接输出json数据, objec0代表输出环境,可以是Response.getWriter()也可以是Outputstream.bean是要输出的数据,集合和单个bean都可以

转载于:https://www.cnblogs.com/zhong320/archive/2013/01/06/2847547.html

你可能感兴趣的文章
C++ 表达式语句 海伦的故事
查看>>
32位汇编学习笔记(1)
查看>>
day_01
查看>>
2013年12月日本語能力試験N3聴解部分
查看>>
uva 1349(拆点+最小费用流)
查看>>
关于SessionFactory的不同实现类分别通过getCurrentSession()方法 和 openSession() 方法获取的Session对象在保存对象时的一些区别...
查看>>
Web开发细节搜集
查看>>
织梦kindeditor图片上传增加图片说明alt属性和title属性
查看>>
HTML fieldset标签
查看>>
Popover view and Modal view
查看>>
linux 块操作 分类: ubuntu pytho...
查看>>
数字通信与数据通信有什么区别
查看>>
[TJOI 2016&HEOI 2016]排序
查看>>
HDU 1242 Rescue
查看>>
规范浮点数
查看>>
Qt 之 饼图
查看>>
SQL整理
查看>>
1.1. agregate
查看>>
『Blocks 区间dp』
查看>>
字符串级路径处理
查看>>