struts2-json中注解@JSON是什么用

 我来答
greystar_cn
推荐于2016-09-15 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
需要的jar包是struts2.1.8,json插件就是2.1.8的struts2-json-plugin-2.1.8.1,因为json的第三方插件有很多,例如json-lib-2.4-jdk15和json虽然说可以实现json的处理,但是相对来说可能是有点麻烦,而S2自带的插件为简单一点。
实例:(分页查询和添加)
实体类(domain)
public classFieldmanage implements java.io.Serializable {

// Fields

privateInteger fieldManageId;
privateString fieldManageName;
privateString fieldManageDesc;
privateString isuse;
getter&&setter省略。
}
数据访问Dao
public classFieldManageDao extendsHibernateEntityDao<Fieldmanage> {

public booleanoperaFieldmanage(Fieldmanage fieldmanage){
try {
this.saveOrUpdate(fieldmanage);
return true;
} catch(Exception e) {
e.printStackTrace();
}
return false;
}

publicList<Fieldmanage> getFieldmanageList(String name,intstart,int end){
String hql="from Fieldmanage where fieldManageName like '%"+name+"%'";
List<Fieldmanage> list=null;
try {
Query q = this.getSession().createQuery(hql);
q.setFirstResult(start);
q.setMaxResults(end);
list = q.list();
} catch(Exception e) {
e.printStackTrace();
}
return list;
}

public intgetFieldmanageCount(String name){
String hql="select count(*) from Fieldmanage where fieldManageName like '%"+name+"%'";
intcount=0;
try {
Query q =this.getSession().createQuery(hql);
count = Integer.parseInt(q.uniqueResult().toString());
} catch(Exception e) {
e.printStackTrace();
}
returncount;
}
业务逻辑层Service
public classFieldManageService {
//spring注入
privateFieldManageDao fieldManageDao;
public voidsetFieldManageDao(FieldManageDao fieldManageDao) {
this.fieldManageDao = fieldManageDao;
}

public booleanoperaFieldmanage(Fieldmanage fieldmanage){
return fieldManageDao. operaFieldmanage (fieldmanage);

}

publicList<Fieldmanage> getFieldmanageList (String name,intstart,int end){
List<Fieldmanage> list=null;
try {
list = fieldManageDao.getFieldmanageList(name, start, end);
} catch(Exception e) {
e.printStackTrace();
}
return list;
}

public intgetFieldmanageCount(String name){
return fieldManageDao.getFieldmanageCount(name);
}
}
Struts控制层
public classFieldManageAction extends ActionSupport {
privateFieldManageService fieldManageService;
privateFieldmanage fieldmanage;

privateList<Fieldmanage> data;
private int totalCount;
privateString success;
//分页
private int start;
private int limit;
均有getter和setter方法,但是service注入进来的方法最好没有get

publicString operaFieldmanage(){
try {
boolean sign = fieldManageService.operaFieldmanage(fieldmanage);
if(sign){
this.setSuccess("true");
}else{
this.setSuccess("false");
}
} catch(Exception e) {
this.setSuccess("false");
e.printStackTrace();
}
return "operaFieldmanage";
}

publicString fieldManageList(){
String name="";
try {
if(fieldmanage对象和名称是否为null){
name=fieldmanage.getFieldManageName();
}
intlimitNo=15;
if(limit!=0){
limitNo=limit;
}
int count = fieldManageService.getFieldmanageCount(name);
List<Fieldmanage> list = fieldManageService.getFieldmanageList(name, start, limitNo);
this.setData(list);
this.setTotalCount(count);
} catch(Exception e) {
e.printStackTrace();
}
return this.SUCCESS;
}
}
Action里面提供get方法就行了,不必用其他的json插件将list等转化为json格式,因为strut2的插件可以帮你识别并自动转换,你需要做的就是将你得到的数据set进去。
Struts.xml
<package name="default" extends ="json-default" >
<action name="fieldManage_*" method="{1}" lass="fieldManageAction">
<result type="json">
<param name="includeProperties">totalCount,data.*</param>
</result>
<result name="operaFieldmanage" type="json">
<param name="includeProperties">success</param>
</result>
</action>
</package>
extends=”json-default”这边必须这样设置才能处理json。
1.<action name="test" class="com.TestAction" method="test">
< result type="json" /><!--将action的bean属性以json字符串返回浏览器-->
< /action>
2.只要继承extends="json-default",json拦截器是默认配置上的,可以不配。result设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用js的callback方法. 返回json数据
3.如果按照1中的配置。你会发现前台返回的json字符串,是把action中的所有属性全部转化为json字符串返回给浏览器了(甚至有时候返回不了结果,也不报错,后台执行了,但前台执行不到callback function),但是我们有时候需要根据实际情况返回部分结果,如何对json的结果进行定制输出呢?result提供了一些参数替你解决这个问题,一般情况下用的最多的就是includeProperties 参数和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
4.includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。这个参数直接返回对象的json数据,前台不需要eval转换,<param name="root">result</param>则不同,需要前台进行eval转换
如:输出data对象下面的所有属性 和 总条数。
<result type="json">
<param name="includeProperties">totalCount,data.*</param>
</result>
5.excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
6.对一些属性的特殊处理可在action代码中去特殊的序列化,如:
[6.1]默认情况下以get方法开头的都会序列化,如果不想序列化,在action中的方法要打上注解
@JSON(serialize=false)

[6.2]如果在属性get方法上面加@JSON(name="newName"),则返回的json数据中名称是指定的新名称

[6.3]@JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化输出、解析日期表单域的格式。

[6.4]@JSON(deserialize=true)设置是否反序列化该属性
千锋教育
2018-07-29 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
处理JSON数据
6.对一些属性的特殊处理可在action代码中去特殊的序列化,如:
[6.1]默认情况下以get方法开头的都会序列化,如果不想序列化,在action中的方法要打上注解
@JSON(serialize=false)

[6.2]如果在属性get方法上面加@JSON(name="newName"),则返回的json数据中名称是指定的新名称

[6.3]@JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化输出、解析日期表单域的格式。

[6.4]@JSON(deserialize=true)设置是否反序列化该属性
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秒懂百科
2021-01-28 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.2亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式