【问题标题】:Create model and fill it according to API response JSON创建模型并根据 API 响应 JSON 填充
【发布时间】:2019-05-21 07:52:14
【问题描述】:

我正在尝试制作模型,json模型。当我得到响应时,我应该解析它们并填充我的模型。我真的不明白应该怎么做。例如对于我收到的响应:

"userId": 1,
"userAccess": 1,
"CE": "WP",

我应该制作这样的模型,并且应该根据该响应填充该模型。 我的模型应该看起来像我认为的那样:

"userId": ,
"userAccess": ,
"CE": "",

我的模型必须根据响应填充,比如 userId 必须填写 1,userAcces 填写 1,CE 填写“WP”

我从 API 响应解析 json 没有问题,但我不知道我的模型应该如何填充解析的 json。

这就是我试图解析我的 json 的方式:

public MyApiService(Integer someId) {
        String endpoint = "http://test-coregatewayapi.com/os/" + someId
        RequestObject request  =  findTestObject('Object Repository/Loans_Requests/ColGet/GET')
        request.setRestUrl(endpoint)
        ResponseObject resp = WS.sendRequestAndVerify(request)
        String getcontent = resp.getResponseBodyContent()
        parsedJson = slurper.parseText(getcontent)
    }

    public int getData() {
        return parsedJson[0]['dataId']
    }

【问题讨论】:

  • 你试过什么?例如。 Jackson 允许将数据绑定到对象。
  • 我已经用附加的代码更新了我的问题。
  • 您正在寻找的输出是ToString(includeNames=true) 中的一个标志 - 请参阅docs.groovy-lang.org/latest/html/gapi/groovy/transform/… 和恕我直言,这不是原始问题的一部分(您要求映射而不是如何漂亮地打印它)
  • 我已经用代码回答了我的问题,是的,打印结果不是主要问题。我已经弄清楚如何制作模型并用接收到的 json 数据填充它。
  • 这就是我的建议:从您的问题中删除答案。也删除关于 toString 的问题。接下来创建一个关于您的 toString 问题的新问题。 SO是关于问答的。因此,对于一个特定问题,请保持您的 Q 简单。

标签: java model-view-controller groovy


【解决方案1】:

这取决于您使用的框架。

以 gson 为例:

String json = "{\"brand\":\"Jeep\", \"doors\": 3}"
Gson gson = new Gson()
Car car = gson.fromJson(json, Car.class)

简单粗暴的

 def json = new JsonSlurper().parse(...) as Car

【讨论】:

  • 我使用 JsonSlurper,我已经用我正在使用的代码更新了我的问题。
  • 请注意,只有当映射不包含超出目标类字段的键时,强制转换才有效。虽然这会静默失败(no 字段已设置),但如果使用地图 c'tor,您至少会遇到一个异常。
  • @daggett 我们可以在房间里说话吗?
【解决方案2】:

我已经弄清楚了如何解决我的问题。

这是我的代码:

public class MyApiService {

JsonSlurper slurper = new JsonSlurper()

    public MyApiService() {

    }

    public JsonModel MyApiServiceCall(Integer someId) {
        String endpoint = "http://test-coregatewayapi.com/v1/" + someId
        RequestObject request  =  findTestObject('Object Repository/Deposits_Requests/GET/GET_De')
        request.setRestUrl(endpoint)
        ResponseObject resp = WS.sendRequestAndVerify(request)
        String getcontent = resp.getResponseBodyContent()
        def parsedJson = slurper.parseText(getcontent)
        def newModel = new JsonModel(parsedJson)
        return newModel
    }


}

@ToString
    class JsonModel {
        String typeId
        boolean isOk
        Float balance
    }

在主测试用例中我只是简单地使用这个:

MyApiService test = new MyApiService()
JsonModel model=test.MyApiServiceCall(39)

def k = model.type

我可以在哪里获取任何已解析的对象。

【讨论】:

  • 请注意,如果地图包含键,对象没有属性,则使用 Map c'tor 会抛出。
  • 对不起,我没听懂。
  • 如果您传递给 JsonModel 的隐式 Map 构造函数的映射(newModel)包含除 typeId、isOk、ballance 以外的任何其他键,这将引发 MissingPropertyException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
相关资源
最近更新 更多