[英]Failing to get a POST request body
我正在尝试从请求发布方法的主体中获取 JSON(使用失眠/邮递员),但我在这方面没有进展。 我做了一个名为 PlayerData 的 class,它只有一个属性(userId)。 I'm using Jackson library to use readValue method, in order to map my json body to my java class PlayerData. 为了能够看到正在发生的事情,我已经放置了一个打印日志和断点来调试可能发生的事情,但由于某种原因,我的代码都跳过了它们。 我没有回复,因为在这种情况下我不想回复。 这里的想法只是从正文请求中设置一个带有 userId 的 PlayerData 实例,而无需将数据保存在磁盘上。
玩家数据.class
package com.pipa.api;
import lombok.Builder;
import lombok.Value;
@Value
@Builder
public class PlayerData {
private Integer userId;
}
应用.java
package com.pipa.api;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
public class Application {
private static ObjectMapper objectMapper;
public static void main(String[] args) throws IOException {
int serverPort = 8000;
HttpServer server = HttpServer.create(new InetSocketAddress(serverPort), 0);
server.createContext("/post", (exchange -> {
if ("POST".equals(exchange.getRequestMethod())) {
PlayerData playerData = objectMapper.readValue(exchange.getRequestBody(), PlayerData.class);
System.out.println("this print never appear");
} else {
exchange.sendResponseHeaders(405, -1); // 405 Method Not Allowed
}
exchange.close();
}));
server.setExecutor(null); // creates a default executor
server.start();
}
}
objectMapper.readValue(exchange.getRequestBody(), PlayerData.class);
行发生了一些事情。
exchange.getRequestBody()
返回 InputStream 的一个实例。 我试图将 InputStream 转换为字符串,它工作正常。 我还使用了net.sf.json.JSONObject来解析JSON字符串,然后将其转换为object的ZA2F212ED4F8EBC2CBB1. 如果您使用这种方法,代码执行将转到最后一个打印语句。
InputStream inputStream = exchange.getRequestBody();
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer );
String theString = writer.toString();
System.out.println(theString);
JSONObject jsonObject = JSONObject.fromObject(theString);
PlayerData pd = (PlayerData) JSONObject.toBean(jsonObject, PlayerData.class);
System.out.println(pd.toString());
这只是一种解决方法,因为我仍然不明白objectMapper
问题背后的原因。
代码有2个问题。
private static ObjectMapper objectMapper;
永远不会被初始化。 因此你会得到 NullPointerException。 尝试private static ObjectMapper objectMapper = new ObjectMapper();
使用 Lombok 和 Jackson,您可能需要按照此链接中的说明进行更改
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.