问题描述
这是我的POST测试方法
public void createParagraph3() {
RestAssured.baseURI = paragraphsURL;
Map<String,Object> map = new HashMap<String,Object>();
map.put("featurePackage",Arrays.asList(new HashMap<String,String>() {{
put("name","Test");
put("inputText","test test");
}}));
map.put("features",Object>() {{
put("featureType","Feature");
put("inUse","true");
put("name","test xyxy");
}}));
map.put("type",String>() {{
put("key","int");
put("name","Introduction");
}}));
RequestSpecification request = RestAssured.given();
request.header("Content-Type","application/json");
request.body(map).toString();
Response response = request.post();
int statusCode = response.getStatusCode();
System.out.println("Response body: " + response.body().asstring());
System.out.println("Status code received: " + statusCode);
}
以下是我在创建测试的基础上的要求
{
"featurePackage": {
"features": [
{
"featureType": "string","id": 0,"inUse": true,"name": "string"
}
],"name": "string","objectCount": 0
},"features": [
{
"featureType": "string","name": "string"
}
],"inputText": "string","objectCount": 0,"outputHtmlText": "string","sourceFileName": "string","type": {
"key": "string","name": "string"
}
}
我做错了什么?我仍然收到400响应“无法反序列化实例”。有人可以帮忙吗?我的方法请求不完整?
解决方法
编辑1:
根本原因是map.toString()
不是有效的JSON字符串。
有两种方法可以解决此问题:
PS:有关map.toString()
Map<String,Integer> map = new HashMap<>();
map.put("apple",1);
map.put("banana",2);
System.out.println(map.toString());
// get: {apple=1,banana=2} is NOT a valid JSON String
// but,{"apple":1,"banana":2} is a valid JSON String
编辑2:
由于问题的所有者添加了一些评论,因此我必须添加以下答案。
Pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.0</version>
</dependency>
Java代码:
// your comment
Map<String,Object> titles = new HashMap<>();
titles.put("titles",Arrays.asList(new HashMap<String,Object>() {
{
put("id","876");
put("title","test");
}
}));
System.out.println(titles);
// my new answer
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(titles);
System.out.println(json);