Java 如何以JSON字符串形式发送改装后的正文?

Java 如何以JSON字符串形式发送改装后的正文?,java,android,retrofit,converters,webapi,Java,Android,Retrofit,Converters,Webapi,我有如下服务。我调用方法Retroifit库。当我发送带有@Body Test类型的参数时,服务工作,但我希望使用@Body String工作,我不创建Test类并在@Body中使用它。我创建了一个JSONObject,并将其转换为String,但这样,程序就不能运行了!你能帮我一下,或者提出一个解决方案吗 我的Web API: [Route("TestService"), HttpPost, IgnoreDataLog] public async Task&

我有如下服务。我调用方法
Retroifit
库。当我发送带有
@Body Test
类型的参数时,服务工作,但我希望使用
@Body String
工作,我不创建
Test
类并在
@Body
中使用它。我创建了一个
JSONObject
,并将其转换为
String
,但这样,程序就不能运行了!你能帮我一下,或者提出一个解决方案吗

我的Web API:

    [Route("TestService"), HttpPost, IgnoreDataLog]
    public async Task<Result<TestResult>> Add(Test pmDeviceObj)
    {
        var listResult = await pmService.AddAsync(pmDeviceObj);
        return listResult;
    }
[路由(“测试服务”),HttpPost,IgnoreDataLog]
公共异步任务添加(测试pmDeviceObj)
{
var listResult=await pmService.AddAsync(pmDeviceObj);
返回列表结果;
}
安卓部分:

@POST("TestService")
Call<Result<TestResult>> TestService(@Header("Content-Type") String content_type,@Body String body);
@POST(“测试服务”)
调用TestService(@Header(“Content Type”)String Content_Type,@Body String Body);
在Android中调用服务->我得到状态码400,代码如下

    JSONObject jsonBody=new JSONObject();
    try {
        jsonBody.put("Id",73);
        jsonBody.put("seri","55656573");
        jsonBody.put("code","fc24009b9160");
        jsonBody.put("sID",8);
    }catch (JSONException ex){
        ex.printStackTrace();
    }

    retrofit2.Call<Result<TestResult>> call1=service.TestService("application/json",jsonBody.toString());
JSONObject jsonBody=new JSONObject();
试一试{
jsonBody.put(“Id”,73);
jsonBody.put(“seri”、“55656573”);
jsonBody.put(“代码”,“fc24009b9160”);
jsonBody.put(“sID”,8);
}捕获(JSONException ex){
例如printStackTrace();
}
调用call1=service.TestService(“application/json”,jsonBody.toString());
如果我在Android部分使用下面的代码,那么一切都正常,我会获取数据

@POST("TestService")
Call<Result<TestResult>> TestService(@Header("Content-Type") String content_type,@Body Test inputValue);

 Test test=new Test(73,"556565","fc24009b9160",8);
 retrofit2.Call<Result<TestResult>> call1=service.TestService("application/json",test);
@POST(“测试服务”)
调用TestService(@Header(“Content Type”)字符串Content_Type,@Body Test inputValue);
测试=新测试(73,“556565”,“fc24009b9160”,8);
2.调用call1=service.TestService(“application/json”,test);

之所以发生这种情况,是因为
改造
字符串
视为必须转换为JSON的“普通”对象,并且不知道它已经是对象的JSON表示

如果您配置了
HttpLogginInterceptor
,您应该看到(简化示例)您的JSON字符串:

{“sId”:“8”}

实际上是这样的:

“{\'sId\':\'8\'”

为了防止这种情况发生,您需要使用类似于注释所建议的
scalarscoverterfactory
。首先,您需要为它设置依赖项:

用于Gradle

dependencies {    
    implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
}
或适用于Maven

<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>converter-scalars</artifactId>
    <version>2.4.0</version>
</dependency>

发生这种情况的原因是
reformation
String
视为必须转换为JSON的“普通”对象,并且不知道它已经是对象的JSON表示

如果您配置了
HttpLogginInterceptor
,您应该看到(简化示例)您的JSON字符串:

{“sId”:“8”}

实际上是这样的:

“{\'sId\':\'8\'”

为了防止这种情况发生,您需要使用类似于注释所建议的
scalarscoverterfactory
。首先,您需要为它设置依赖项:

用于Gradle

dependencies {    
    implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
}
或适用于Maven

<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>converter-scalars</artifactId>
    <version>2.4.0</version>
</dependency>
检查链接检查链接