您的当前位置:首页 > 百科 > struts2如何返回json和处理json 正文
时间:2026-10-17 04:36:31 来源:网络整理 编辑:百科
Struts2的JSON处理,说穿了就是两个方向:把Java对象变成JSON字符串吐给前端,再把前端传来的JSON字符串变成Java对象接住。这事听起来简单,但真做起来,坑都在细节里。 先看返回JSO
Struts2的何返回jn和JSON处理,说穿了就是处理两个方向:把Java对象变成JSON字符串吐给前端,再把前端传来的何返回jn和JSON字符串变成Java对象接住。这事听起来简单,处理但真做起来,何返回jn和坑都在细节里。处理
先看返回JSON。何返回jn和Struts2里最常用的处理招数是配置一个叫做json-default的包,然后让Action继承它。何返回jn和这包里面藏着个JSONResult,处理你只要在struts.xml里把result的何返回jn和type写成json,框架就会自动把Action里的处理属性序列化成JSON响应给浏览器。但这里有个容易踩的何返回jn和雷——默认情况下,它会把Action里所有getter方法的处理返回值都给序列化出去。我见过不少新手把一些不该暴露的何返回jn和内部状态,比如数据库连接池或者临时缓存对象,全给吐出去了,前端拿到一堆莫名其妙的数据不说,还可能触发懒加载异常。
要控制输出内容,得在Action类上或者getter方法上动刀子。比如用@JSON(serialize=false)注解排除某个字段,或者反过来用@JSON(name="newName")改变字段名。更优雅的做法是实现json-exclude拦截器,定义一组要排除的属性名。但说实话,最省心的还是让Action继承一个专门的基类,把需要输出的对象放在一个叫data的字段里,然后统一只序列化这一个字段。这样前端拿到的永远是一个包裹着数据的标准结构,格式统一,解析也方便。
再谈接收JSON。Struts2接收JSON得靠struts2-json-plugin里的JSONInterceptor。这个拦截器负责把请求体里的JSON字符串反序列化成Java对象,然后塞进Action的字段里。配置方法是在Action的package里加上一个自定义拦截器栈,把json拦截器放在defaultStack前面。关键点在于,你必须在Action里给对应的字段提供setter方法,而且字段类型得匹配。要是前端传了个数组,你这边用List
有个细节特别容易忽略:JSON的key和Java字段名不一致怎么办?比如前端喜欢用下划线风格user_name,而后端Java习惯驼峰userName。这时候你得在setter方法上标注@JSON(name="user_name"),或者在拦截器配置里指定一个objectMapper的命名策略。我碰到过最头疼的情况是前端传了个嵌套对象,比如{ "user":{ "name":"张三","age":25}},这要求Action里有个User类型的字段,并且User类内部也得有对应的setter。如果嵌套层级深,光靠自动装配容易出错,最好在Action的setter里手动做一次转换,比如接收一个Map,然后用工具类转成真正的业务对象。
还有个实战经验——处理JSON时务必设置正确的编码。Struts2默认可能按ISO-8859-1来读请求体,要是前端用UTF-8发送中文内容,你这边接到的就是乱码。解决办法是在web.xml里配置一个CharacterEncodingFilter,强制UTF-8编码,并且放在所有过滤器的前面。这问题不解决,后面解析JSON全是白费功夫。
最后说个性能上的小观察。当Action里字段特别多时,JSON序列化会明显变慢,尤其是那些带大量嵌套集合的对象。我建议在返回JSON前,先把要输出的数据整理成一个轻量级的DTO或者Map,只保留前端需要的字段。这不仅仅是省带宽,更是减少序列化耗时。Struts2的JSON插件底层用的是Jackson,虽然功能强大,但对象图太复杂时,序列化成本会成倍增长。把数据瘦身一下,响应速度能快不少。
说白了,Struts2处理JSON并不复杂,核心就是理解拦截器的工作时机和注解的作用范围。配置对了,几行代码就能搞定;配置错了,调试起来能让你怀疑人生。多写几个测试用例,把字段映射、类型转换、编码问题都覆盖到,比什么都强。
抖音红黑粉游戏话术2026-10-17 04:24
黑客代码做小游戏2026-10-17 04:22
网优工程师简历2026-10-17 04:13
python信息炸弹2026-10-17 04:04
成功销售必读的24本书2026-10-17 03:48
贝壳海外房产网2026-10-17 03:19
龙岩 冠豸山机场 lcx2026-10-17 03:18
php查看curl请求的参数2026-10-17 02:30
网站后门检测在线2026-10-17 02:18
阿里漏洞报备美国2026-10-17 01:58
网络安全小论文500字2026-10-17 04:20
百家号AI标题生成2026-10-17 04:14
微博如何找大v推广2026-10-17 03:49
web的发展2026-10-17 03:45
绝对路径2026-10-17 03:38
入侵彩票2026-10-17 02:52
怎么投诉58同城平台2026-10-17 02:46
linux系统管理的漏洞表现在哪里2026-10-17 02:37
中国反网络诈骗官网2026-10-17 02:13
贷款网站注册2026-10-17 01:57