需求:
Springboot使用mongoTmp,按顺序向Mongo插入实体类的数据
也可以理解为Json按顺序序列化
问题:
在使用Springboot向Mongo使用LinkedHashMap可以解决但是最好的方案显然是实体类注入,但发现顺序是乱的。
解决:
在实体类中使用JSONField(ordinal = 1, name="_id")
说明一下,ordinal是顺序,name是指定字段名,在mongo中有的是带有下划线的会被自动去掉,需要设置下name就可以了
@Document(collection = "core-configuration")
@Data
public class CoreConfiguration {
@Id
@JSONField(ordinal = 1, name="_id")
private String _id;
@JSONField(ordinal = 2, name="_class")
private String _class;
@JSONField(ordinal = 3)
private Values values;
@JSONField(ordinal = 4)
private Access access;
@JSONField(ordinal = 5)
private Metadata metadata;
@Data
public static class Values {
private boolean enabled;
public Values(boolean enabled) {
this.enabled = enabled;
}
}
@Data
public static class Access {
private boolean global;
private List<String> entries;
public Access(boolean global, List<String> entries) {
this.global = global;
this.entries = entries;
}
}
@Data
public static class Metadata {
private String tenantId;
private int version;
private int state;
public Metadata(String tenantId, int version, int state) {
this.tenantId = tenantId;
this.version = version;
this.state = state;
}
}
}
类中的方法 部分值的获取代码未贴入,请自行赋值选择
@Service
@Slf4j
public class OpenAuthService {
@Autowired
private MongoTemplate mongoTemplate;
public void internalInsert(String tenantId) {
log.info("插入模板");
CoreConfiguration coreConfiguration = new CoreConfiguration();
coreConfiguration.set_id(tenantId + "-deptauthcontrol");
coreConfiguration.set_class("cn.xxxx.charites.core.types.Configuration");
coreConfiguration.setValues(new CoreConfiguration.Values(true));
coreConfiguration.setAccess(new CoreConfiguration.Access(false, null));
coreConfiguration.setMetadata(new CoreConfiguration.Metadata(tenantId, 1, 1));
//vs.setEnabled(true);
String json = JSONObject.toJSONString(coreConfiguration);
mongoTemplate.insert(json , "core-configuration");
}
}
结果如下: