版本JFinal4.9
现有代码:
@Override
public void configConstant(Constants me) {
  me.setJsonDatePattern("yyyy-MM-dd");
  JFinalJson.setModelAndRecordFieldNameToCamelCase();
  me.setJsonFactory(MixedJsonFactory.me());
}数据库create_time字段类型为datetime,映射的Java model已确认为java.util.Date,以下为BaseXXX的相关代码
public M setCreateTime(java.util.Date createTime) {
 set("create_time", createTime);
 return (M)this;
}
public java.util.Date getCreateTime() {
 return get("create_time");
}现象:无论修改me.setJsonDatePattern("yyyy-MM-dd");为什么格式,返回的json字段都是yyyy-MM-dd HH:mm:ss格式
相关源码分析:
JFinalJson
@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public String toJson(Object object) {
 if (object == null) {
  return "null";
 }
 
 JsonResult ret = TL.get();
 try {
  // 优先使用对象级的属性 datePattern, 然后才是全局性的 defaultDatePattern
  String dp = datePattern != null ? datePattern : getDefaultDatePattern();
  ret.init(dp, timestampPattern);
  ToJson toJson = kit.getToJson(object);
  toJson.toJson(object, convertDepth, ret);
  return ret.toString();
 }
 finally {
  ret.clear();
 }
}JFinalJsonKit
if (value instanceof java.util.Date) {
 if (value instanceof Timestamp) {
  return new TimestampToJson();
 }
 if (value instanceof Time) {
  return new TimeToJson();
 }
 return new DateToJson();
}调试:

调试发现createTime被作为Timestamp处理了,而timestampPattern的值目前无法修改,因为MixedJson.getJFinalJson()为private方法,也就没办法获取这个内部实例调用setTimestampPattern()
建议me.setJsonDatePattern("yyyy-MM-dd");的时候同时设置defaultDatePattern和timestampPattern都为这个值,这样子更常用一些,或者退而求其次开放设置JFinalJson.timestampPattern的方法,即修改MixedJson.getJFinalJson()为public方法
JFinalJson.addToJson(Timestamp.class, (v, d, ret) -> {
Timestamp t = (Timestamp)v;
String s = ret.getFormat("yyyy-MM-dd").format(t);
ret.addStrNoEscape(s);
});
由于 Json.java 中并不支持 timestampPattern 配置,所以该配置仅仅是 JFinalJson 内部使用的,所以你当前无法简单地通过配置解决问题
在你不扩展的情况下,只可以临时指令 timestampPattern,例如:
JFinalJson.getJson().setTimestampPattern(...).toJson(...);
上面的临时指定不是全局配置,需要每次都要调用一下那个 setTimestampPattern