當我嘗試發送它時,它顯示“錯誤”:“錯誤請求”,“跟蹤”:“...HttpMessageNotReadableException:JSON 決議錯誤:無法反序列化java.time.LocalDate來自字串“quoteDate”型別的映射鍵:無法反序列化 java .time.LocalDate"
我通過郵遞員發送的 JSON:
{
"stockId":"test3",
"quotes":[
{
"quoteDate":"2003-05-14",
"quoteValue":"35.9"
},
{
"quoteDate":"2016-03-28",
"quoteValue":"55.0"
}
]
}
控制器:
@PostMapping("/stock/save")
public void saveQuotes(@RequestBody StockDTO stockDTO) {
System.out.println(stockDTO.toString());
}
DTO
public class StockDTO {
String id;
String stockId;
Map<LocalDate, Double> quotes;
}
uj5u.com熱心網友回復:
對于引號,應按照 json 字串提供的資料型別是 List。但在 DTO 中獲得了一張地圖。
DTO 應該是 ::
import com.google.gson.Gson;
import java.util.List;
public class GsonMappingExample {
public static void main(String[] args) {
String jsonString = "{\"stockId\":\"test3\",\"quotes\":[{\"quoteDate\":\"2003-05-14\",\"quoteValue\":\"35.9\"},{\"quoteDate\":\"2016-03-28\",\"quoteValue\":\"55.0\"}]}";
Gson gson = new Gson();
StockDTO stockDTO = gson.fromJson(jsonString, StockDTO.class);
System.out.println(stockDTO);
}
}
class StockDTO {
private final String stockId;
private final List<Quote> quotes;
public StockDTO(String stockId, List<Quote> quotes) {
this.stockId = stockId;
this.quotes = quotes;
}
@Override
public String toString() {
return "StockDTO{"
"stockId='" stockId '\''
", quoteList=" quotes
'}';
}
}
class Quote {
private final String quoteDate;
private final Double quoteValue;
public Quote(String quoteDate, Double quoteValue) {
this.quoteDate = quoteDate;
this.quoteValue = quoteValue;
}
@Override
public String toString() {
return "Quote{"
"quoteDate=" quoteDate
", quoteValue=" quoteValue
'}';
}
}
PS:這里我使用 Gson 庫來決議 json 字串,spring-boot 會自動執行此操作(我認為使用 Jackson 庫!)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484789.html
