gpt4 book ai didi

java - 带有 Retrofit 的 POST/PUT 参数的默认/常量值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:08 25 4
gpt4 key购买 nike

使用 Square 的 Retrofit REST Client 库,是否可以为调用中的 POST/PUT 字段提供默认/常量值。

我知道通过简单地将它们包含在路径中来包含常量查询参数,但这适用于 Body 参数。

我有一个类似于以下内容的 API:

POST /api/create
type=constanta&value={value}

POST /api/create
type=constantb&value={value}&otherValue={otherValue}

第二个变体需要提供额外的参数。我希望能够从方法调用中删除常量,而不是让一个 java 方法接受所有三个参数,例如:

create(String value);
create(String value, String otherValue);

并进行改造注入(inject)类型参数常量。

鉴于可以添加 @FormUrlEncoded 来修改正文的编码方式,如果 Retrofit 本身不支持它,是否可以添加我自己的注释并注入(inject)此类默认值? (RequestInterceptor 似乎不允许修改正文..)。

最佳答案

也许一种选择是发送一个对象,它封装了您的所有值,而不是单独封装所有字符串值?该对象将实现您的默认值。

例如,您可以创建一个类:

public class CreateObject {
private String type = "constant";
private String value;
private String otherValue;

public CreateObject(String value, String otherValue) {
this.value = value;
this.otherValue = otherValue;
}
}

你的类处理你的常量。您可以像我上面那样将它设置为默认值“常量”,或者在构造函数中即时设置它。

现在您要做的就是使用这些值创建对象并使用 Retrofit 发出请求。不要直接使用字符串值,只需传递对象即可。您的界面可能如下所示:

public interface CreateService {
@POST("/api/create")
void create(@Body CreateObject create, Callback<CreateObject> cb);
}

请求实现如下:

CreateObject create = new CreateObject("value", "otherValue");
createService.create(create, new Callback<CreateObject)() {…});

这应该包括请求正文中的所有三个值(如果已设置)。如果值为 null,则不会包含在请求正文中。根据上面的两个示例,您现在只需要一个接口(interface)方法。发送哪些值取决于您传递的 createObject。例如,如果您将 otherValue 设置为 null,它将不会成为请求正文的一部分。

我的示例修改自:https://futurestud.io/blog/retrofit-send-objects-in-request-body/

关于java - 带有 Retrofit 的 POST/PUT 参数的默认/常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com