[英]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.