`
sungang_82
  • 浏览: 57598 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2-json-plugin扩展,根据业务解析JSON

 
阅读更多

       在JQuery、Extjs等js框架流行时,JSON数据拼装的简化一直是个问题,在实际业务中,每一个action的function可能需要的JSON都不相同。

       StringBuffer拼写JSON再write出去本来是最灵活的,但是拼写的时候一是难于检查拼写正确性,二是难于维护,所以绝对不能考虑,否则会被后期维护会烦死。领域模型太过于死板,只能写一种业务的JSON。

       借鉴扩展Struts2-json-plugin,可以在Action的方法上增加annotation方式来反射拼写JSON,这样就可以将组装JSON的工作拆分出来,放到通用方法中。实际测试中虽然反射很慢,但是性能问题可以忽略不计,因为浏览器对JSON数据的解析有性能限制,一次不会解析太多数据。

       在原有@JSON标签基础上,增加了 JSONProperty[] 属性

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface JSON {
	
    String name() default "";

    boolean serialize() default true;

    boolean deserialize() default true;

    String format() default "";
    
    JSONProperty[] properties() default {};
}


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface JSONProperty {

	String root() default "";

	String clazz() default "";
	
	JSONType type() default JSONType.list;

	String[] property() default {};
}

    JSONType根据拼写规则不同,分为list,lazyTree,eagerTree,lazyTreeGrid,eagerTreeGrid,checkEagerTree,checkLazyTree,comboList几种,使用效果如下

 

private List<Councils> list;
/**
** 解析Action中的属性——list,并解析list中的对象中的id、name、created以及Councils关联对象 manageOrganization的id、name属性,Councils关联对象 manageUser的id、name属性
**/

@JSON(properties = @JSONProperty(root = "list", property = { "id", "name", "created", "manageOrganization.id", "manageOrganization.name","manageUser.id","manageUser.name" }))
	public String list() {
		return super.list();
	}

 

  在实际使用过程中碰到很多问题,但是达到预期效果

   

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics