gpt4 book ai didi

java - 改造 POST 包含 null body

转载 作者:行者123 更新时间:2023-12-02 04:54:49 25 4
gpt4 key购买 nike

我正在设置一个带有改造的 api 客户端,到目前为止 GET 工作正常,但我正在尝试使用 POST 创建一个新对象,而不是作为 json 发送对象,而是请求正文包含字符串“null”:

---> HTTP POST http://myapiurl
Content-Type: application/json; charset=UTF-8
Content-Length: 4
null
---> END HTTP (4-byte body)

这是我尝试调用的方法:

@POST("/Monsters/")
Response new_monster(@Body Monster mon);

我是这样调用它的:

@Test
public void testNew_monster() throws Exception {
//create a new monster object, and pass it to the function,
//then query and verify it's in the results?
Monster newmon = new Monster() {
{
name = "deleteme";
description = "created by junit test testNew_monster";
image_url = "http://i.imgur.com/";
created_by = "";
encoded_key = "";
}
};

Response r = client.new_monster(newmon);
assertEquals(201, r.getStatus());
//sleep a couple seconds here?

List<Monster> monsterList = client.monsters();
assertTrue(monsterList.contains(newmon));
}

我猜测当使用 GSON 将对象序列化为 json 时出现问题,但在序列化过程中我看不到任何对调试器有帮助的信息...

我使用的是 GSON 版本 2.3.1

编辑:这是我构建 RestAdapter 和客户端的方式:

static MonSpottingApi GetClient(boolean dbg)
{
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();

if (dbg) restAdapter.setLogLevel(RestAdapter.LogLevel.FULL);

MonSpottingApi client = restAdapter.create(MonSpottingApi.class);

return client;
}

在测试用例类中:

MonSightingClient.MonSpottingApi client;

@Before
public void setUp() throws Exception {
client = MonSightingClient.GetClient(true);
}

最佳答案

我怀疑根本原因是 Gson,因此我开始进行非常简单的测试,并尝试使用 toJson() 使对象正确序列化。我想我在 Gson 中发现了一个错误,如果使用双括号语法初始化对象,则会失败:

使用发现的示例类 here

public class GitHubTest {

//fails
@Test
public void testGson1() throws Exception {
GitHubClient.Contributor contrib = new GitHubClient.Contributor() {
{
login = "someguy";
contributions = 99;
}
};
Gson gson = new Gson();
String json = gson.toJson(contrib);
System.out.println("contents of json string: " + json);
assertNotEquals(json, "null");
}

//passes
@Test
public void testGson2() throws Exception {
GitHubClient.Contributor contrib = new GitHubClient.Contributor();
contrib.contributions = 99;
contrib.login = "someguy";
Gson gson = new Gson();
String json = gson.toJson(contrib);
System.out.println("contents of json string: " + json);
assertNotEquals(json, "null");
}
}

这是 Gson 中的错误吗?或者是否有一些奇怪的、微妙的 Java 原因导致这种情况发生? (Java 不是我最强的语言)。

关于java - 改造 POST 包含 null body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28896717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com