未找到接口 java.util.List Rest API Spring boot 的主构造函数

我正在将请求正文传递给邮递员的 POST 请求,类似于:


 "name":"Mars",

"artifacts":[

   {

      "elements":[

         {

            "name":"carbon",

            "amount":0.5,

            "measurement":"g"

         }

      ],

      "typeName":"typeA"

   },

   {

      "elements":[

         {

            "name":"hydrogen",

            "amount":0.2,

            "measurement":"g"

         }

      ],

      "typeName":"typeB"

   }

]

rest 控制器中的 create 方法如下所示。


  @RequestMapping("/create")

  public Planet create(@RequestBody Planet data) {

      Planet mars = planetService.create(data.getName(),data.getArtifacts());

      return mars;

Planet 及其所有嵌套对象都有一个默认构造函数,例如:


public Planet() {}

但是,由于缺少默认构造函数,我无法创建新的行星对象。请帮忙!


编辑:行星类


public class Planet {

@JsonProperty("name")

private String name;

@Field("artifacts")

private List<Artifact> artifacts;


public Planet() {}


public Planet(String name, List<Artifact> artifacts)

{

this.name = name;

this.artifacts = artifacts;

}

//setters and getters


}

神器类:


public class Artifact() {

@Field("elements")

private List<Element> elements;

@JsonProperty("typeName")

private String typeName;


public Artifact() {}


public Artifact(String typeName, List<Element> elements)

{

this.typeName = typeName;

this.elements = elements;

}

}

元素类:


public class Element() {

@JsonProperty("elementName")

private String name;

@JsonProperty("amount")

private double amount;

@JsonProperty("measurement")

private String measurement;


public Element() {}


public Element(String name, double amount, String measurement)

{

//assignments

}

}


繁华开满天机
浏览 361回答 4
4回答

眼眸繁星

当我忘记@RequestBody参数之前时,我遇到了同样的错误&nbsp; @RequestMapping("/create")&nbsp; public Planet create(@RequestBody Planet data) {

回首忆惘然

我不明白您面临的问题是什么,但我可以立即看到一个错误,因此猜测这是您面临的问题,我将为您提供解决方案。创建一个与您的 json 数据结构匹配的类,如下所示:Class PlanetData {&nbsp; &nbsp; private String name;&nbsp; &nbsp; private List<Planet> artifacts;&nbsp; &nbsp; public PlanetData(String name, List<Planet> artifacts){&nbsp; &nbsp; &nbsp; &nbsp; name = name;&nbsp; &nbsp; &nbsp; &nbsp; artifacts = artifacts;&nbsp; &nbsp; }&nbsp; &nbsp; // include rest of getters and setters here.}然后你的控制器应该是这样的。基本上,您需要将@RequestBody要从请求 JSON 中接收的所有参数放入其中。之前您只@RequestBody输入名称参数而不是工件参数,并且由于请求正文只能使用一次,因此您需要一个包装类来使用单个@RequestBody注释接收完整的请求正文。@RequestMapping("/create")&nbsp; public String create(@RequestBody PlanetData data) {&nbsp; &nbsp; &nbsp; Planet mars = planetService.create(data.getName(),data.getArtifacts());&nbsp; &nbsp; &nbsp; return mars.toString();&nbsp; }编辑:查看 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.}

翻阅古今

我想,它正在尝试调用new List()没有构造函数的调用。尝试ArrayList在您的签名中使用。如果它以这种方式工作,那么您已经发现了错误。然后重新考虑调用方法的概念,因为您通常希望避免在方法签名中使用 List 的实现

慕无忌1623718

你应该写如下:...public String create(@RequestBody JSONObject requestParams) {&nbsp; &nbsp; &nbsp; String name=requestParams.getString("name");&nbsp; &nbsp; &nbsp; List<Planet> planetArtifacts=requestParams.getJSONArray("artifacts").toJavaList(Planet.Class);...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java