4 回答

TA貢獻1873條經(jīng)驗 獲得超9個贊
當(dāng)我忘記@RequestBody參數(shù)之前時,我遇到了同樣的錯誤
@RequestMapping("/create")
public Planet create(@RequestBody Planet data) {

TA貢獻1847條經(jīng)驗 獲得超11個贊
我不明白您面臨的問題是什么,但我可以立即看到一個錯誤,因此猜測這是您面臨的問題,我將為您提供解決方案。
創(chuàng)建一個與您的 json 數(shù)據(jù)結(jié)構(gòu)匹配的類,如下所示:
Class PlanetData {
private String name;
private List<Planet> artifacts;
public PlanetData(String name, List<Planet> artifacts){
name = name;
artifacts = artifacts;
}
// include rest of getters and setters here.
}
然后你的控制器應(yīng)該是這樣的?;旧?,您需要將@RequestBody要從請求 JSON 中接收的所有參數(shù)放入其中。之前您只@RequestBody輸入名稱參數(shù)而不是工件參數(shù),并且由于請求正文只能使用一次,因此您需要一個包裝類來使用單個@RequestBody注釋接收完整的請求正文。
@RequestMapping("/create")
public String create(@RequestBody PlanetData data) {
Planet mars = planetService.create(data.getName(),data.getArtifacts());
return mars.toString();
}
編輯:查看 Planet 類,它還需要一些修改
public class Planet {
private String typeName; // key in json should match variable name for proper deserialization or you need to use some jackson annotation to map your json key to your variable name.
private List<Element> elements;
public Planet() {}
public Planet(String typeName, List<Element> elements)
{
this.typeName = typeName;
this.elements = elements;
}
//setters and getters. Remember to change your setters and getter from name to typeName.
}

TA貢獻1780條經(jīng)驗 獲得超5個贊
我想,它正在嘗試調(diào)用new List()
沒有構(gòu)造函數(shù)的調(diào)用。嘗試ArrayList
在您的簽名中使用。
如果它以這種方式工作,那么您已經(jīng)發(fā)現(xiàn)了錯誤。然后重新考慮調(diào)用方法的概念,因為您通常希望避免在方法簽名中使用 List 的實現(xiàn)

TA貢獻1744條經(jīng)驗 獲得超4個贊
你應(yīng)該寫如下:
...
public String create(@RequestBody JSONObject requestParams) {
String name=requestParams.getString("name");
List<Planet> planetArtifacts=requestParams.getJSONArray("artifacts").toJavaList(Planet.Class);
...
添加回答
舉報