`

Ajax请求后以JSON格式返回数据,Java 中怎么把一个对象封装成Json对象

    博客分类:
  • web
 
阅读更多

第一种方法:

项目当中我希望把一个对象方便的封装成JSON对象,当然需要导入相关Jar 包 json-lib-2.2.2-jdk15.jar 与
commons-beanutils-1.7.0.jar

下面生成Json对象,使用fromObject()方法将user对象格式化成Json格式,如下面代码:

 JSONObject json = new JSONObject().fromObject(user)

当我重启运行后,出现下面的错误

net.sf.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ares.pojo.Member.blacklists, no session or session was closed

这种错误是因为 Hibernate 对象映射后延迟加载错误,好吧,我们把lazy=flase就OK了.可惜我使用的注解的形式,所以我得把 fetch = FetchType.EAGER 换成 fetch = FetchType.LAZY 以为成功了,可是还是出错了,异常如下:net.sf.json.JSONException: There is a cycle in the hierarchy!

 好吧,上面的异常出现那你就不得不看看你映射后的实体当中是不是有对象的集合,这里我将我的实体(member)对象给大家看一下,如下图:



 实体当中有四个集合,如下:

    private Set<Prepaidlog> prepaidlogsForOperateid = new HashSet<Prepaidlog>(0);
    private Set<Shortmsg> shortmsgs = new HashSet<Shortmsg>(0);
    private Set<Prepaidlog> prepaidlogsForOperatedid = new HashSet<Prepaidlog>(0);
    private Set<Blacklist> blacklists = new HashSet<Blacklist>(0);

当json-lib反序列化中会进行双向转换,从而形成死循环,会报一个json-lib的经典异常:net.sf.json.JSONException: There is a cycle in the hierarchy!

也就是说主外键自身关联的是个死循环,那怎么才能不让他出现这种情况呢,应该有个配置的参数后者终止循环的地方吧,查看发
现,jsonConfig,呵呵,config应该是配置参数吧,参看JsonConfig看见巨多的属性,有点晕PropertyFilter 
,不提了,看了老半天,发现了一个属性PropertyFilter,PropertyFilter 是一个interface,代码如下:

 

public interface PropertyFilter
{


public abstract boolean apply(Object obj, String s, Object obj1);
}

也就是说我可以通过这个方法过滤掉集合里的相应属性,只要让它返回true就可过滤掉,……,有点悬……我们重写一下这个方法:


JsonConfig cfg = new JsonConfig();
    cfg.setJsonPropertyFilter(new PropertyFilter()
    {
         public boolean apply(Object source, String name, Object value) {
           if(name.equals("prepaidlogsForOperateid ")||name.equals("shortmsgs ")||name.equals("prepaidlogsForOperatedid ")||name.equals("blacklists ")) {
             return true;
           } else {
             return false;
          }
        }
       });

将hibernate产生的实体bean中的prepaidlogsForOperateid shortmsgs 和 prepaidlogsForOperatedid 还有 blacklists 过滤掉就OK了!

然后调用JSONObject jsonObject = JSONObject.fromObject(member, config);将数据转换成Json对象.

 

第二种方法:

第二种方法使用的是Google的Gson 当然导入相关Jar包:gson-2.1.jar

如果没有主外键自身关联的死循环那,直接可以使用

Gson gson = new Gson();

gson.toJson(member);

上面的方法就是把对象封装成Json对象.

可是我的情况就不一样了,我的操作如下:

因为采用的是注解开发,以所我在我的实体当中要显示的属性要设置为@Expose,当实体的属性设置成@Expose注释的属性将不会被序列化,如我下图:



 然后如下使用就可以了

 Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

gson.toJson(member);

不足之处请大家指点与拍砖,谢谢!

  • 大小: 31.3 KB
  • 大小: 40.8 KB
分享到:
评论

相关推荐

    Ajax请求django返回json数据到前端

    Ajax请求接口,Django框架下从该接口接收Ajax发送的json数据,同时将新的json数据返回给Ajax,Ajax收到后在js进行处理,然后和页面内容交互。整个数据前后端交互全部采用json格式。代码高度封装,只需要更改json内容...

    ajax请求时json时间格式的格式化显示

    总之,`ajaxDataFormat.js`文件提供了一个方便的工具,使得在AJAX请求中处理JSON数据中的时间字段变得更加容易。通过使用这个库,开发者可以快速地将时间戳转换为用户友好的日期和时间格式,提升用户体验。

    AjaxJson实体类与依赖包

    在实际应用中,当后端服务器处理完请求后,可以创建一个`AjaxJson`实例,设置相应的状态码和消息,如果有必要,还可以将处理结果封装到"data"属性中,然后将这个对象转换为JSON字符串,通过HTTP响应发送给前端。...

    json.rar_JSON_JSON java_ajax json_jquery json jar_json-lib-2.2.2

    例如,使用jQuery的$.ajax或$.getJSON方法发起请求,服务器端使用这些jar包解析请求中的JSON数据,处理后返回新的JSON数据,jQuery再将其解析为JavaScript对象,更新页面内容。 总结来说,这个“json.rar”压缩包...

    Dwrweb服务的ajax请求数据直接调用javaDAO类返回JSON数据。取值方便。快捷

    在这个场景下,我们讨论的是通过DWR实现的Web服务,它使用Ajax请求来调用JavaDAO类,以获取并返回JSON数据。 首先,理解DWR的工作原理至关重要。DWR在服务器端运行一个Servlet,这个Servlet负责接收JavaScript的...

    Javaweb项目ajax请求Json实例

    综上所述,"Javaweb项目ajax请求Json实例"涵盖了服务器端数据的JSON封装、AJAX请求的发送、JSON数据在JSP页面上的解析与展示等多个关键知识点。在实际开发中,理解并掌握这些概念和技术对于构建交互性强、响应快速的...

    ajax与php利用json传输数据,实现局部刷新

    1. **Ajax工作原理**:Ajax通过JavaScript创建XMLHttpRequest对象,打开一个与服务器的连接,发送请求,监听状态变化,当服务器响应时,处理返回的数据。这个过程是异步的,不会阻塞页面的其他操作。 2. **JSON...

    使用json封装数据 html源代码

    在Web开发中,JSON常用于从服务器向客户端传递数据,例如在AJAX(Asynchronous JavaScript and XML)请求中,服务器返回的响应通常就是JSON格式的数据。 描述中的“json的简单应用”表明我们将探讨JSON的基础用法,...

    下载json,ajax传送对象的好帮手

    1. **创建JSON对象**:在服务器端,你可以使用各种编程语言(如JavaScript、Python、Java等)创建一个数据结构,然后将其转换为JSON字符串。 2. **发送AJAX请求**:前端通过XMLHttpRequest或更现代的fetch API发起...

    java中对ajax经典封装

    本资料包中的"java中对ajax经典封装"提供了关于如何在Java环境中优雅地处理Ajax请求的详细教程。 1. **Ajax工作原理**: Ajax的核心是JavaScript对象XMLHttpRequest,它允许在后台与服务器进行异步数据交换。通过...

    JSON格式文件返回JAR包

    在描述中提到的"JSON格式文件返回JAR包",指的是一个服务端程序可能通过处理某些业务逻辑后,将结果以JSON格式编码,并将其封装到一个JAR(Java Archive)文件中返回给客户端。JAR文件是Java平台特有的打包格式,它...

    $.ajax json数据传递方法.docx

    $.ajax json 数据传递方法是使用 jQuery 库实现的异步数据传递方法,通过将 JSON 数据封装在 $.ajax 对象中,并将其作为参数传递给服务器端脚本,以实现客户端和服务器端之间的数据交互。 在前台代码中,首先定义了...

    利用JQuery jsonp实现Ajax跨域请求json数据

    在以上代码中,服务器接收到请求后,将返回的数据以JSON格式封装在回调函数内,客户端接收到响应后会自动执行这个函数,将数据解析并处理。 总结起来,jQuery的jsonp机制使得跨域请求变得简单。通过在客户端设置`...

    echartsJava后台封装数据

    这可以通过创建一个Java对象,模拟ECharts的JSON结构,然后使用Jackson或Gson等库将其转换为JSON字符串。例如: ```java public class EchartsData { private List&lt;Series&gt; series; private GlobalConfig global;...

    Jquery ajax json 总结

    JQuery AJAX 和 JSON 是在 Web 开发中处理异步数据传输和数据格式化的重要工具。本文将深入探讨这两个概念以及它们在实际应用中的使用方法。 首先,JQuery 的 AJAX(Asynchronous JavaScript and XML)功能允许...

    使用Ajax动态加载JSON文件

    在实际应用中,为了使代码更具可维护性和复用性,我们可能还会封装一个通用的Ajax函数,以处理不同的数据请求。此外,现代浏览器提供了`fetch` API,它提供了一种更简洁的接口来执行Ajax请求: ```javascript fetch...

    ajax向springmvc传递json

    4. Spring MVC 控制器处理:在Spring MVC中,可以定义一个控制器方法,该方法的参数使用@RequestBody注解,Spring MVC会自动将接收到的JSON数据映射到对应的Java对象。例如: ```java @PostMapping("/handleJson") ...

    JavaScript-初识ajax、ajax封装、及json简单实战案例(下).pdf

    // 假设有一个`getJokes`函数用于封装Ajax请求 function getJokes(callback) { ajaxRequest('https://api.example.com/jokes', 'GET', callback); } // 在HTML中添加一个触发请求的按钮 ()"&gt;加载段子 // ...

    json数据封装,传递,解析

    客户端可以轻松地将JavaScript对象转换为JSON字符串,通过HTTP请求传递给服务器,服务器解析后进行业务处理,再以JSON形式返回,最后由客户端解析并展示给用户。理解并熟练掌握JSON的封装、传递和解析对于任何Web...

    php+ajax+json的简单实例

    在本实例中,`ajax_json.php`文件很可能是实现这些功能的核心,它可能包含接收AJAX请求、处理数据并以JSON格式返回的PHP代码。 接下来,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许在...

Global site tag (gtag.js) - Google Analytics