android 删除POST主体改装中的可选参数

3phpmpom  于 2023-05-05  发布在  Android
关注(0)|答案(2)|浏览(98)

我有一个情况,在Web服务调用是从两个不同的情况。文章正文有2个可选参数。这两个参数需要在一种情况下存在,而在另一种情况下不应该存在。
示例:-
场景1帖子正文:-

{
    "parameter1" : "data1",
    "parameter2" : "data2",
    "parameter3" : "data3",
    "parameter4" : "data4"
}

场景2帖子正文:-

{
    "parameter1" : "data1",
    "parameter2" : "data2",
    "parameter3" : "data3",
    "parameter4" : "data4",
    "parameter5" : "data5",
    "parameter6" : "data6"
}

我如何使用reflection和Jackson来实现这一点?

w8rqjzmb

w8rqjzmb1#

用于建模POST正文的Object应该用
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true)
然后从那里离开

"parameter5" : "data5",
 "parameter6" : "data6"

null,则不应序列化它们。

tp5buhyn

tp5buhyn2#

解决方案是,我们需要使用hashMap来实现这种可选参数方法。
举个例子。

val req: HashMap<String,Any?> =HashMap()
req["parameter1"] = "value1"
req["parameter2"] = false // example boolean value as false in second param
req["parameter3"] = "value4"
req["parameter4"] = "value5"
if(someCondition==true) //condition to include remaining optional params
{
  req["parameter5"] = "value5"
  req["parameter6"] = "value6"
}

在API调用中将此req对象作为请求体传递
仅供参考(额外提示):
根据我们在构建改造服务对象时为Convertor.Factory值设置的配置,改造要么直接从对象中保留所有空参数值,要么删除空参数值。这可以在不需要或需要空值的某些情况下使用。

//to keep null value params in object
    val convertorFactory= GsonConverterFactory.create(GsonBuilder().serializeNulls().create())    

//or

    // eliminate null params
    val convertorFactory= GsonConverterFactory.create()

    return Retrofit.Builder().addConverterFactory(convertorFactory)

相关问题