Java 带有改装的POST/PUT参数的默认值/常量值

Java 带有改装的POST/PUT参数的默认值/常量值,java,rest,retrofit,Java,Rest,Retrofit,使用Square中的翻新REST客户机库,是否可以在调用中为POST/PUT字段提供默认值/常量值 我知道如何通过简单地将常量查询参数包含在路径中来包含它们,但这对Body参数有效 我有一个API,它看起来类似于: POST /api/create type=constanta&value={value} POST /api/create type=constantb&value={value}&otherValue={otherValue} 其中,第二个变量需要提供

使用Square中的翻新REST客户机库,是否可以在调用中为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);
并让改造注入类型参数常量


考虑到可以添加
@FormUrlEncoded
来修改正文的编码方式,如果改装本机不支持,是否有必要添加我自己的注释并注入这些默认值?(看来,
RequestInterceptor
不允许修改主体..)。

您可以使用Guava或Java 8 Optional作为方法中的第二个参数吗?然后,如果该参数不存在,您可以忽略它

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

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

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;
    }
}
您的类处理常量。您可以将其设置为默认值“常量”,就像我在上面所做的那样,或者在构造函数中动态设置它

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

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)() {…});
公共接口创建服务{
@POST(“/api/create”)
void create(@Body CreateObject create,回调cb);
}
请求实现如下所示:

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)() {…});
CreateObject create=newcreateobject(“值”、“其他值”);

createService.create(create,newcallback)我可以使用Guava,我没有意识到它支持改型(我没有看到任何地方提到过它),但是,这仍然需要在调用站点提供不需要的常量值。我不太了解改装,但您是否厌倦了类似的内容?我看到了那篇文章,但它讨论的是查询参数,而不是post/PUT主体参数,也不是常量值。我想我真正想做的唯一方法是使用@Body参数,并为不同的案例传入不同的类。