Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在改装后请求中发送空车身_Java_Request_Jackson_Retrofit - Fatal编程技术网

Java 在改装后请求中发送空车身

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 {

我的api在发出post请求时需要一个空的json正文(
{}
)。如何在改装和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>
}