把实体 转为json 数据格式---jackson 的详细用法.

下载: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" )
@JsonAutoDetect
public  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<Menu> menus = new  HashSet<Menu>( 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<Menu> getMenus() {
         return  this .menus;
     }
 
     public  void  setMenus(Set<Menu> menus) {
         this .menus = menus;
     }
 
     
 
 
  /*jackson就是根据get方法来获取属性值的,如果持久化的属性值不符合你的要求,
可以通过更改get方法来实现。
比如说你的实体里有个set<xxx> 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都可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值