将 JSON 对象从 vert.x 中的 JDBC 结果集映射到 Java/Groovy class(es) 的最佳方法是什么?
What is the best way to map the JSON Object from a JDBC result set in vert.x to a Java/Groovy class(es)?
如果我有类似于下面的代码块:
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);
杰克逊应该解决这个问题
如果我有类似于下面的代码块:
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);
杰克逊应该解决这个问题