Java 带有改装的POST/PUT参数的默认值/常量值
使用Square中的翻新REST客户机库,是否可以在调用中为POST/PUT字段提供默认值/常量值 我知道如何通过简单地将常量查询参数包含在路径中来包含它们,但这对Body参数有效 我有一个API,它看起来类似于: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} 其中,第二个变量需要提供
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参数,并为不同的案例传入不同的类。