Struts2自定义Result处理JSON
以前在采用Struts2开发的项目中,对JSON的处理一直都在Action里处理的,在Action中直接Response,最近研读了一下Struts2的源码,发现了一个更加优雅的解决办法,自己定义一个ResultType,
首先大家先看下Struts2中的源码
包com.opensymphony.xwork2下的DefaultActionInvocation
472行
/** * Save the result to be used later. * @param actionConfig current ActionConfig * @param methodResult the result of the action. * @return the result code to process. */ protected String saveResult(ActionConfig actionConfig, Object methodResult) { if (methodResult instanceof Result) { this.explicitResult = (Result) methodResult; // Wire the result automatically container.inject(explicitResult); return null; } else { return (String) methodResult; } }
如果resultType实现了Result接口,则执行
this.explicitResult = (Result) methodResult; // Wire the result automatically container.inject(explicitResult); return null;
现在我们来定义一个接口(JsonResult)来处理一般的POJO对象
package com.kiloway.struts; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.StrutsResultSupport; import com.opensymphony.xwork2.ActionInvocation; public class JsonResult extends StrutsResultSupport { private Object result; private JsonConfig jsonConfig; public Object getResult() { return result; } public JsonResult(JsonConfig jsonConfig) { super(); this.jsonConfig = jsonConfig; } public void setResult(Object result) { this.result = result; } private static final long serialVersionUID = 7978145882434289002L; @Override protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception { HttpServletResponse response = null; try { response = ServletActionContext.getResponse(); PrintWriter printWriter = response.getWriter(); if (jsonConfig != null) { printWriter.write(JSONObject.fromObject(result).toString()); } else { printWriter.write(JSONObject.fromObject(result, jsonConfig) .toString()); } }catch(Exception e){ throw new Exception("json parse error!"); } finally { response.getWriter().close(); }} }
JsonReulst定义好了该如何让Struts处理呢?
我们在struts.xml里面可以这样定义
<package name="default" namespace="/" extends="struts-default"> <result-types> <result-type name="jsonResult" class="com.kiloway.struts.JsonResult"/> </result-types> <action name="student" class="com.kiloway.struts.Student"> <result name="json" type="jsonResult"/> </action> </package>
reuslt的name可以任意,但type必须和你注册的ResultType相同。
Action 中直接这样调用
public JsonResult getJson() { UserInfo f = new UserInfo(); f.setName("小睿睿"); f.setPassword("哈哈"); JsonResult jsonResult = new JsonResult(); jsonResult.setResult(f); return jsonResult; }
在我们的Action代码中就不用response.write了,完全交给了Reuslt对象去处理了(doExecute)
这样就很方便的处理了JSON格式的数据
struts的开发包里,发现了一个JSON处理插件 struts2-json-plugin-2.3.8.jar
该插件提供了更完善的JSON处理解决方案。
原文http://blog.csdn.net/myxx520/article/details/8655088
转载于:https://www.cnblogs.com/azhqiang/p/4676048.html
Struts2自定义Result处理JSON相关推荐
- php自定义函数格式化,PHP自定义函数格式化json数据实例
这篇文章主要介绍了PHP自定义函数格式化json数据的方法,结合实例形式分析了php通过自定义函数进行字符串与数组的遍历.转换.计算等操作实现json数据格式化的功能,需要的朋友可以参考下 具体如下: ...
- springmvc 自定义view支持json和jsonp格式数据返回
1.如果controlloer上用@ResponseBody注解,则用<mvc:message-converter>里面配置的json解析器进行解析 <mvc:annotation- ...
- php 自定义格式化,PHP自定义函数格式化json数据示例
本文实例讲述了PHP自定义函数格式化json数据的方法.分享给大家供大家参考,具体如下: /** * Formats a JSON string for pretty printing * * @pa ...
- Struts2 自定义验证器
1.工程目录结构图: 2.以下依次帖代码: a). web.xml <?xml version="1.0" encoding="UTF-8" ...
- struts2自定义标签_Struts 2 –没有为动作和结果输入定义结果
struts2自定义标签 Recently while working on a Struts 2 project, I got a strange error message No result d ...
- java action result_Struts2 Result 返回JSON对象详解
如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择.而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好 ...
- python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...
python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...
- java的tcp实时接收json格式报文_tcp - 如何使用带有rsocket Java的TcpClientTransport将自定义数据格式转换为JSON - 堆栈内存溢出...
我有一个Tcp数据提供程序,它使用管道定界符发出数据,该定界符需要转换为JSON,然后存储在NoSQL数据存储区中. 我已使用RSocket中的TcpClientTransport协议连接到提供程序, ...
- var obj = eval(result); 解析json
l var obj = eval(result);解析json 转载于:https://www.cnblogs.com/baijin05/p/5040422.html
最新文章
- 第一章:1.1.3 典型信号
- 【翻译】卡通图解DNS,你的信息怎么被泄露的?
- C#获取程序集的版本号和最后编译时间
- 你知道“拉黑”、“关注”、“点赞”、“转发”、“分享到朋友圈”等英语咋说吗?
- 东芝移动硬盘驱动_传输数据不用等,高速移动硬盘数据线畅享快传体验
- dj鲜生-08-用户注册的功能-上-实现注册的主逻辑和其本的验证功能-伴随着调试
- c# string 转 datetime_tesseract || PDF转PNG转txt
- Java集合基础知识总结
- 西昌学院计算机科学与技术好不好,西昌学院好不好评价怎么样
- timequest静态时序分析学习笔记之工具使用
- java spit 点_java split 的一些用法注意点。
- CFS 调度器数据结构篇
- IE中使用Google Chrome Frame运行HTML 5
- Python 免费翻译API
- mysql localhost无法连接
- 2022最新淘客三合一cms商城优惠券系统搭建教程
- 让IE浏览器打开JSON文件直接显示
- 修改TOMCAT6.0内存的方法
- 机器学习入门例子--预测浏览量
- 熬过最艰难的日子说说
热门文章
- 一次 Druid 连接池泄露引发的血案!
- 在校生如何快速提升竞争力
- 理解分布式系统中的缓存架构(上)
- 左耳朵耗子论微服务 Serverless 及 FaaS | GIAC 访谈
- Spring Boot中使用MongoDB数据库
- Java:假设车库有3个车位(可以通过boolean[]数组来表示车库)可以停车,写一个程序模拟多个用户开车离开,停车入库的效果。注意:车位有车时不能停车。
- Module not found: Error: Can't resolve 'less-loader' in 'E:\NodeDemo\vue_assistant_lsp'
- 论转发与重定向参数传递问题(jsp+servlet项目开发遇到的问题)
- date oracle 表中_从 MySQL 迁移数据到 Oracle 中的全过程
- ajax提交后立刻刷新,Ajax提交表单页面刷新很快的解决方法