Java 在改装后请求中发送空车身
我的api在发出post请求时需要一个空的json正文(Java 在改装后请求中发送空车身,java,request,jackson,retrofit,Java,Request,Jackson,Retrofit,我的api在发出post请求时需要一个空的json正文({})。如何在改装和Jackson中设置此功能 我试图传递null、空字符串和“{}”,但无法使其工作 @POST(my/url) Call<MyResponse> createPostRequest(@Body Object empty); @POST(我的/url) 调用createPostRequest(@Body对象为空); 如何设置空的JSON正文?空类将实现以下功能: class EmptyRequest {
{}
)。如何在改装和Jackson中设置此功能
我试图传递null
、空字符串和“{}”
,但无法使其工作
@POST(my/url)
Call<MyResponse> createPostRequest(@Body Object empty);
@POST(我的/url)
调用createPostRequest(@Body对象为空);
如何设置空的JSON正文?空类将实现以下功能:
class EmptyRequest {
public static final EmptyRequest INSTANCE = new EmptyRequest();
}
interface My Service {
@POST("my/url")
Call<MyResponse> createPostRequest(@Body EmptyRequest request);
}
myService.createPostRequest(EmptyRequest.INSTANCE);
class EmptyRequest{
public静态final-EmptyRequest实例=new-EmptyRequest();
}
接口我的服务{
@帖子(“我的/url”)
调用createPostRequest(@Body EmptyRequest请求);
}
createPostRequest(EmptyRequest.INSTANCE);
试试这个。这对我现在起作用了
@POST(my/url)
Call<MyResponse> createPostRequest(@Body Hashmap );
旧问题,但我通过使用
okhttp3.Interceptor
找到了一个更合适的解决方案,该拦截器在没有正文的情况下添加一个空正文。此解决方案不需要为空的@Body
添加额外参数
例如:
Interceptor interceptor = chain -> {
Request oldRequest = chain.request();
Request.Builder newRequest = chain.request().newBuilder();
if ("POST".equals(oldRequest.method()) && (oldRequest.body() == null || oldRequest.body().contentLength() <= 0)) {
newRequest.post(RequestBody.create(MediaType.parse("application/json"), "{}"));
}
return chain.proceed(newRequest.build());
};
使用:
空对象为Kotlin执行此操作:
interface ApiService {
@POST("your.url")
fun createPostRequest(@Body body: Any = Object()): Call<YourResponseType>
}
接口服务{
@POST(“your.url”)
fun createPostRequest(@Body:Any=Object()):调用
}
您是否尝试了不带参数的方法?是的,然后它会发送一个不带正文的请求。我想您可以使用singleton实例创建一些空类,例如EmptyRequest
,并将其作为参数传递。
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.addInterceptor(interceptor);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("YourURL")
.client(client.build())
.build();
MyService service = retrofit.create(MyService.class);
@POST("something")
Call<MyResponse> createPostRequest(@Body Object o);
createPostRequest(new Object())
interface ApiService {
@POST("your.url")
fun createPostRequest(@Body body: Any = Object()): Call<YourResponseType>
}