Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Helidon 2.0.0-M-2更改查询返回的JSON_Helidon - Fatal编程技术网

如何使用Helidon 2.0.0-M-2更改查询返回的JSON

如何使用Helidon 2.0.0-M-2更改查询返回的JSON,helidon,Helidon,我用的是直升机2.0.0-M2。 当我运行下面的查询时,我得到一个JSON对象列表 dbClient.execute(exec -> exec.createNamedQuery("select-dsitem-by-id") .addParam("userId", dataItemId) .execute()) .thenAccept(response::send)

我用的是直升机2.0.0-M2。 当我运行下面的查询时,我得到一个JSON对象列表

dbClient.execute(exec -> exec.createNamedQuery("select-dsitem-by-id")
                .addParam("userId", dataItemId)
                .execute())
                .thenAccept(response::send)
                .exceptionally(throwable -> sendError(throwable, response));

返回列表

[
    {
        "data": "qwerty",
        "user_id": "12345"
    },
    {
        "data": "qwerty123",
        "user_id": "22345"
    }
]
属性名称似乎直接取自数据库列名。e、 g.返回的一个属性名称是“user\u id”。但是,我希望它是“userId”。我还想为该列表创建一个父包装,如:

{
    "userList": [
        {
            "data": "qwerty",
            "user_id": "12345"
        },
        {
            "data": "qwerty123",
            "user_id": "22345"
        }
    ]
}
使用dbclient执行此操作的最佳方法是什么

感谢

简单的方法: 更改SQL语句以返回正确的名称,例如:
从mytable中选择数据、用户id作为用户id

复杂的方法: 我们正在致力于更好地支持映射到JSON流。 目前只有一种(有点复杂)方法可以实现这一点:

您可以从
DbRow
JsonObject
创建自定义映射器。此映射器必须是通用映射器(它必须适用于任何查询的任何
DbRow

内置映射器使用列上提供的元数据。我准备了一个简单的示例(只希望有一种类型的语句):

类DbRecordMapperProvider实现DbMapperProvider{ private static final DbMapper MAPPER=new DbRecordMapper(); @抑制警告(“未选中”) @凌驾 公共可选映射器(类aClass){ if(JsonObject.class.equals(aClass)){ 返回可选的.of((DbMapper)映射器); } 返回可选的.empty(); } } 类DbRecordMapper实现DbMapper{ @凌驾 公共JsonObject读取(DbRow DbRow){ 返回Json.createObjectBuilder() .add(“name”,dbRow.column(“FIRSTPART”).as(String.class)) .add(“message”,dbRow.column(“SECONDPART”).as(String.class)) .build(); } @凌驾 公共映射到NamedParameters(JsonObject dbRecord){ 返回数据库记录; } @凌驾 索引参数的公共列表(JsonObject dbRecord){ 抛出新的IllegalStateException(“无法将json对象转换为索引参数”); } } 重要的方法是
publicjsonobjectread(DbRow-DbRow)

一旦有了这样一个
dbapperprovider
,就可以在DbClient中注册它:

dbClient=dbClient.builder()
.config(config.get(“db”))
.mapperProvider(新的DbRecordMapperProvider())
.build();
简单方法: 更改SQL语句以返回正确的名称,例如:
从mytable中选择数据、用户id作为用户id

复杂的方法: 我们正在致力于更好地支持映射到JSON流。 目前只有一种(有点复杂)方法可以实现这一点:

您可以从
DbRow
JsonObject
创建自定义映射器。此映射器必须是通用映射器(它必须适用于任何查询的任何
DbRow

内置映射器使用列上提供的元数据。我准备了一个简单的示例(只希望有一种类型的语句):

类DbRecordMapperProvider实现DbMapperProvider{ private static final DbMapper MAPPER=new DbRecordMapper(); @抑制警告(“未选中”) @凌驾 公共可选映射器(类aClass){ if(JsonObject.class.equals(aClass)){ 返回可选的.of((DbMapper)映射器); } 返回可选的.empty(); } } 类DbRecordMapper实现DbMapper{ @凌驾 公共JsonObject读取(DbRow DbRow){ 返回Json.createObjectBuilder() .add(“name”,dbRow.column(“FIRSTPART”).as(String.class)) .add(“message”,dbRow.column(“SECONDPART”).as(String.class)) .build(); } @凌驾 公共映射到NamedParameters(JsonObject dbRecord){ 返回数据库记录; } @凌驾 索引参数的公共列表(JsonObject dbRecord){ 抛出新的IllegalStateException(“无法将json对象转换为索引参数”); } } 重要的方法是
publicjsonobjectread(DbRow-DbRow)

一旦有了这样一个
dbapperprovider
,就可以在DbClient中注册它:

dbClient=dbClient.builder()
.config(config.get(“db”))
.mapperProvider(新的DbRecordMapperProvider())
.build();

selectdsitem by idquery是什么样子的?这是一个简单的select语句“selectuser\u id,type,data FROM data\u store WHERE user\u id=:userId”这是一个简单的select语句“selectuser\u id,type,data FROM data\u store WHERE user\u id=:userId”谢谢。SQL语句目前是最简单的。可以用其他JSON(如命名数组)包装输出?谢谢。SQL语句目前是最简单的。是否可以用其他JSON(如命名数组)包装输出?