JsonConfig的jsonConfig.setExcludes的用法

JsonConfig的jsonConfig.setExcludes的用法

之前写一个小东西,当用JSONArray.fromObject()方法转一个对象集合时,因为对象中存在一对多的关系,一直抛出异常

严重: Error executing FreeMarker template
FreeMarker template error:
Java method “org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int)” threw an exception when invoked on net.sf.json.JSONException object “net.sf.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cn.zzuli.app.domain.User.positions, no session or session was closed”; see cause exception in the Java stack trace.


FTL stack trace (“~” means nesting-related):

- Failed at: ${msg[0]?html} [in template “org/apache/struts2/dispatcher/error.ftl” at line 68, column 29]

Java stack trace (for programmers):

freemarker.core._TemplateModelException: [… Exception message was already printed; see it above …]
at freemarker.ext.beans._MethodUtil.newInvocationTemplateModelException(_MethodUtil.java:311)
at freemarker.ext.beans._MethodUtil.newInvocationTemplateModelException(_MethodUtil.java:275)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:80)
at freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:86)
at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:104)
at freemarker.core.DynamicKeyName._eval(DynamicKeyName.java:69)
at freemarker.core.Expression.eval(Expression.java:78)
at freemarker.core.Expression.evalAndCoerceToString(Expression.java:82)
at freemarker.core.BuiltInForString._eval(BuiltInForString.java:26)
at freemarker.core.Expression.eval(Expression.java:78)
at freemarker.core.Expression.evalAndCoerceToString(Expression.java:82)
at freemarker.core.DollarVariable.accept(DollarVariable.java:40)
at freemarker.core.Environment.visit(Environment.java:312)
at freemarker.core.MixedContent.accept(MixedContent.java:62)
at freemarker.core.Environment.visitByHiddingParent(Environment.java:333)
at freemarker.core.IfBlock.accept(IfBlock.java:48)
at freemarker.core.Environment.visitByHiddingParent(Environment.java:333)
at freemarker.core.IteratorBlock Context.runLoop(IteratorBlock.java:159)atfreemarker.core.Environment.visitIteratorBlock(Environment.java:559)atfreemarker.core.IteratorBlock.accept(IteratorBlock.java:67)atfreemarker.core.Environment.visit(Environment.java:312)atfreemarker.core.MixedContent.accept(MixedContent.java:62)atfreemarker.core.Environment.visitByHiddingParent(Environment.java:333)atfreemarker.core.IfBlock.accept(IfBlock.java:48)atfreemarker.core.Environment.visit(Environment.java:312)atfreemarker.core.MixedContent.accept(MixedContent.java:62)atfreemarker.core.Environment.visit(Environment.java:312)atfreemarker.core.Environment.process(Environment.java:290)atfreemarker.template.Template.process(Template.java:312)atorg.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.handleErrorInDevMode(DefaultDispatcherErrorHandler.java:99)atorg.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.handleError(DefaultDispatcherErrorHandler.java:57)atorg.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:909)atorg.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:576)atorg.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)atorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)atorg.apache.coyote.http11.Http11Protocol Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at freemarker.ext.beans.SimpleMethod.unwrapArguments(SimpleMethod.java:53)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:72)
… 44 more

然后通过询问别人,知道了JsonConfig的jsonConfig.setExcludes()这个方法,简单的说,这个就是过滤掉不需要的属性,因此就可以用这个方法过滤掉对象中存在的一对多的关系

List userList = userService.findAll();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{“area”});
JSON json = JSONSerializer.toJSON(userList, jsonConfig);

setExcludes()里面的集合,就是你想要过滤掉的属性的名字。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`JsonConfig` 类是 `net.sf.json` 库中的一部分,用于配置 JSON 转换过程中的一些选项。通过使用 `registerJsonValueProcessor` 方法,你可以注册自定义的值处理器来转换特定类型的数据。 要将 `Date` 和 `Timestamp` 类型转换为 JSON,你可以创建一个自定义的值处理器,并在其中实现转换逻辑。 下面是一个示例: ```java import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Date; public class DateTimeJsonValueProcessor implements JsonValueProcessor { private static final String DATE_PATTERN = "yyyy-MM-dd"; private static final String TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss"; @Override public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value); } @Override public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value); } private Object process(Object value) { if (value instanceof Date) { SimpleDateFormat dateFormat; if (value instanceof Timestamp) { dateFormat = new SimpleDateFormat(TIMESTAMP_PATTERN); } else { dateFormat = new SimpleDateFormat(DATE_PATTERN); } return dateFormat.format((Date) value); } return null; } } ``` 在上述示例中,我们创建了一个名为 `DateTimeJsonValueProcessor` 的类,实现了 `JsonValueProcessor` 接口。该处理器可以将 `Date` 类型和 `Timestamp` 类型的数据转换为指定格式的字符串。 然后,在使用 `JsonConfig` 进行 JSON 转换时,通过调用 `registerJsonValueProcessor` 方法注册该处理器: ```java JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class, new DateTimeJsonValueProcessor()); jsonConfig.registerJsonValueProcessor(Timestamp.class, new DateTimeJsonValueProcessor()); // 使用 jsonConfig 进行 JSON 转换 ``` 通过上述配置,`Date` 和 `Timestamp` 类型的数据将会按照指定的格式转换为字符串,并作为 JSON 输出。 请注意,`DateTimeJsonValueProcessor` 中的日期格式是示例中的一种,你可以根据自己的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值