当前位置: 首页 > 知识库问答 >
问题:

我想在改造中使用相同的模型,以获得不同类型的API响应

於炯
2023-03-14

我有两个外部模型相同的API,所以我为外部模型(ResponseModel)和结果键创建了一个模型类,我为结果键创建了一个名为ResultModel的类,所以我可能能够编写结果键上可能出现的所有响应

@JsonIgnoreProperties(ignoreUnknown = true)
    public  class ResponseModel {
    @JsonProperty("code")
    private Integer code;

    @JsonProperty("message")
    private String message;

    @JsonProperty("result")
    private List<ResultModel> result;
}

在这里,我添加了ResultModel结果键中可能的响应,将给出国家列表或州列表

@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultModel {

    private Country country;

    private State state;

}

CountryList API 1结果

{ 
    "code" :102
    "message" : "message string"
    "result" : [ 
                 { "id" : 1, "name": "hello" },  
                 { "id" : 2, "name": "world" }]
}

状态列表API 2结果

{ 
    "code" :101
    "message" : "message test"
    "result" : [ 
                 { "id" : 1, "name": "hello", "code" :1001 },  
                 { "id" : 2, "name": "world", "code" :1002 }]
}

我遵循这个结构来重用外部模型。但它不起作用

不管怎样,都可以重用ResponseModel,而不必为国家和州创建每个类。

共有2个答案

从智志
2023-03-14

你需要的是低级建筑。。

data class WebResponse<T>(
    val code: Int,
    val message: String,
    val result: List<T>
) {}

给你的服务打电话

@GET("/countryList")
fun getCountries(): Call<WebResponse<CountryEntity>>

@GET("/stateList")
fun getStateList(): Call<WebResponse<StateEntitiy>>
甄德寿
2023-03-14

您的实现的问题是,您正在以错误的方式构建对象,对于当前的类,您正在等待这样的json:

{ 
    "code" :102
    "message" : "message string"
    "result" : [ 
        {
            "country" : { "id" : 1, "name": "hello" }, 
            "state" : { "id" : 2, "name": "world", "code" :1002 }
        }
     ]
}

一个更好的选择,是像这样使用泛型:

@JsonIgnoreProperties(ignoreUnknown = true)
public  class ResponseModel<T> {
  @JsonProperty("code")
  private Integer code;

  @JsonProperty("message")
  private String message;

  @JsonProperty("result")
  private List<T> result;
}

然后,您可以在实现中指定要查看的对象类型:

ResponseModel<Country>
ResponseModel<State>

并且不再需要类ResultModel。

 类似资料:
  • 3. 我不想在我的API中传递所有的参数作为请求体,有些只有查询、变量、输入有些只有查询和变量,就像上面的json数据,我想创建相同的模型,可以在其余的API中使用。目前,我已经为每个API创建了不同的模型。 公共类CreatetRequest{ } 这里我在所有API中复制了我的模型,所以我想创建三个模型类,其中包含所有必需的变量,这些变量在我的引导应用程序中都是常见的,但同时我必须避免在res

  • 因此,我正在创建一个用户API,并尝试在登录前调用getUserByEmail()。我的问题是,我得到了一个不明确的处理程序方法映射为HTTP路径错误。 我知道我的问题与我有一个相同但参数类型不同的GET有关。任何帮助都将不胜感激!

  • 以下是GSON的例外: 改型实例是使用GsonConverterFactory创建的

  • 我已经使用登录API在Jmeter中进行了测试。 为此,我通过了以下请求: 帖子网址:......POST数据参数:"电子邮件地址":"a@gmail.com","密码":"ad332017" 对于上述要求,我得到两种不同的答复。 邮递员:我收到回复,状态代码200 OK(这也是预期的) 在Jmeter上,我得到响应:响应代码:307响应消息:临时重定向。 谁能帮我解决这个问题?

  • 我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?

  • 是否可能有多个方法具有相同的名称,但采用不同的列表类型。这当然可以通过定期重写来实现,但java无法区分两种不同的列表类型。除了有不同的名字,还有别的办法吗?例如: 如果我们有 在同一个班级。