将JSON对象从vert.x中的JDBC结果集映射到Java/Groovy类的最佳方法是什么?
如果我有一个类似于下面的代码块:将JSON对象从vert.x中的JDBC结果集映射到Java/Groovy类的最佳方法是什么?,groovy,vert.x,Groovy,Vert.x,如果我有一个类似于下面的代码块: conn.queryWithParams("select * from my_user where user_id = ?", params, { queryRes -> if (queryRes.succeeded()) { ResultSet rs = queryRes.result() def objects = r
conn.queryWithParams("select * from my_user where user_id = ?", params, { queryRes ->
if (queryRes.succeeded()) {
ResultSet rs = queryRes.result()
def objects = rs.getRows()
def user = new User()
def jsonObjectFromDB = objects.get(0)
user.userId = jsonObjectFromDB.getLong("user_id")
routingContext.response().setStatusCode(200).end(Json.encode(user))
} else {
// query failed
println "QUERY FAILED"
throw queryRes.cause()
}
})
而不是对用户对象的每个字段执行此操作:
user.userId = jsonObjectFromDB.getLong("user_id")
是否有更好的vert.x方法从数据库中获取所有值并将它们放入相应的对象中 您应该能够编写如下POJO:
package some.package.or.other;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties
public class User {
private final String userId;
private final Integer someOtherValue;
@JsonCreator
public User(@JsonProperty("user_id") String userId,
@JsonProperty("some_other_value") Integer someOtherValue) {
this.userId = userId;
this.someOtherValue = someOtherValue;
}
public String getUserId() {
return userId;
}
public Integer getSomeOtherValue() {
return someOtherValue;
}
}
然后,您应该可以拨打:
User user = io.vertx.core.json.Json.decodeValue(json, User.class);
jackson应该把它整理一下难道你不能用
解码值
将json字符串转换成一个实例吗?User User=new User(objects.get(0))
有什么问题吗?澄清一下,我的java/groovy对象及其字段遵循java类型命名约定(驼峰大小写),比如“userId”而且数据库使用典型的SQL命名约定,如“user_id”,因此对象的数据库中有轻微的变化。对于hibernate,有一些注释,但我不确定这里最好的是什么。。。也许在这种情况下,重命名数据库的列是“更好”的方法?只是jackson的问题,不是吗?用@JsonProperty(“snake_name”)
注释你的setter(或者你的@JsonCreator
注释的构造函数参数,如果你喜欢不变性的话)效果很好,正是我想要的,谢谢!