Java 如何在Spring Boot Rest中正确发布json对象
我不熟悉Spring引导Rest,并尝试使用post ab对象作为Rest请求。但它不起作用,我得到了零回报: 这是我想发布的对象:Java 如何在Spring Boot Rest中正确发布json对象,java,json,spring,rest,spring-boot,Java,Json,Spring,Rest,Spring Boot,我不熟悉Spring引导Rest,并尝试使用post ab对象作为Rest请求。但它不起作用,我得到了零回报: 这是我想发布的对象: public class Flight { private String code; private Route route; private LocalDateTime departure; private LocalDateTime arrival; //Constructor //Getters and Sett
public class Flight {
private String code;
private Route route;
private LocalDateTime departure;
private LocalDateTime arrival;
//Constructor
//Getters and Setters
}
@RequestMapping(value = "/testflight", method = RequestMethod.POST)
public Flight createFlight(@RequestBody Flight inputPayload) {
Flight response = inputPayload;
response.setCode(inputPayload.getCode());
response.setRoute(inputPayload.getRoute());
response.setDeparture(inputPayload.getDeparture());
response.setArrival(inputPayload.getArrival());
System.out.println("Flight details are:" + "\n" + inputPayload.getCode() + "\n" + inputPayload.getRoute() + "\n" + inputPayload.getDeparture() + "\n" + inputPayload.getArrival());
return response;
}
{ "flight": {
"code" : "THY1770",
"route": {
"airport": [
{ "code": 1, "name": "IST" },
{ "code": 2, "name": "STG" }
],
"departure" : "2014-01-01",
"arrival" : "2014-01-01"
}
}
}
这是路线等级:
public class Route {
private final Airport from;
private final Airport to;
//Constructor
//Getters
}
public class Airport {
private final String code;
private final String name;
//Constructor
//Getters
}
这是我的机场课程:
public class Route {
private final Airport from;
private final Airport to;
//Constructor
//Getters
}
public class Airport {
private final String code;
private final String name;
//Constructor
//Getters
}
这是我的控制器:
public class Flight {
private String code;
private Route route;
private LocalDateTime departure;
private LocalDateTime arrival;
//Constructor
//Getters and Setters
}
@RequestMapping(value = "/testflight", method = RequestMethod.POST)
public Flight createFlight(@RequestBody Flight inputPayload) {
Flight response = inputPayload;
response.setCode(inputPayload.getCode());
response.setRoute(inputPayload.getRoute());
response.setDeparture(inputPayload.getDeparture());
response.setArrival(inputPayload.getArrival());
System.out.println("Flight details are:" + "\n" + inputPayload.getCode() + "\n" + inputPayload.getRoute() + "\n" + inputPayload.getDeparture() + "\n" + inputPayload.getArrival());
return response;
}
{ "flight": {
"code" : "THY1770",
"route": {
"airport": [
{ "code": 1, "name": "IST" },
{ "code": 2, "name": "STG" }
],
"departure" : "2014-01-01",
"arrival" : "2014-01-01"
}
}
}
这是我的JSON:
public class Flight {
private String code;
private Route route;
private LocalDateTime departure;
private LocalDateTime arrival;
//Constructor
//Getters and Setters
}
@RequestMapping(value = "/testflight", method = RequestMethod.POST)
public Flight createFlight(@RequestBody Flight inputPayload) {
Flight response = inputPayload;
response.setCode(inputPayload.getCode());
response.setRoute(inputPayload.getRoute());
response.setDeparture(inputPayload.getDeparture());
response.setArrival(inputPayload.getArrival());
System.out.println("Flight details are:" + "\n" + inputPayload.getCode() + "\n" + inputPayload.getRoute() + "\n" + inputPayload.getDeparture() + "\n" + inputPayload.getArrival());
return response;
}
{ "flight": {
"code" : "THY1770",
"route": {
"airport": [
{ "code": 1, "name": "IST" },
{ "code": 2, "name": "STG" }
],
"departure" : "2014-01-01",
"arrival" : "2014-01-01"
}
}
}
当我发布此JSON时,我只得到以下信息:
航班详情如下:
无效的
无效的
无效的
null控制器内部的代码可能错误: 复制
inputPayload
的引用,然后在同一对象上调用setter是没有意义的:
我认为,考虑到Flight
类中实现的toString
,您可以:
@PostMapping("/testflight") // this is just a better syntax than @RequestMapping
public Flight createFlight(@RequestBody Flight inputPayload) {
System.out.println(inputPayload); // just to test yourself
return inputPayload;
}
话虽如此,所有映射都已正确完成,注释也已按要求放置,因此如果它不起作用,则错误可能在其他地方(问题中未公布)。控制器内部的代码可能是错误的: 复制
inputPayload
的引用,然后在同一对象上调用setter是没有意义的:
我认为,考虑到Flight
类中实现的toString
,您可以:
@PostMapping("/testflight") // this is just a better syntax than @RequestMapping
public Flight createFlight(@RequestBody Flight inputPayload) {
System.out.println(inputPayload); // just to test yourself
return inputPayload;
}
话虽如此,所有映射都已正确完成,注释也已按要求放置,因此如果它不起作用,错误可能在其他地方(问题中未发布)。因为控制器仅部分发布(即:仅方法,而非完整类),我将假设它非常简单,并且已经被注释为@RestController 看起来,对象和传递的JSON负载之间存在一些差异 生成控制器将接受的JSON的一种简单方法是在控制器中公开一个方法,该方法不接受任何参数作为输入,而是生成一个航班作为输出。然后,您可以将该输出用作构建后续JSON请求的模板 尝试发布以下JSON:
{
"code" : "THY1770",
"route": {
"from": {
"code": "ABC",
"name": "My Airport 1"
},
"to": {
"code": "DEF",
"name": "My Airport 2"
}
}
"departure" : null,
"arrival" : null
}
请注意,在我的回答中,我已将日期设置为空。对于那些你必须确保你提供的格式被接受。使用我在开始时解释的技巧,尝试找出一种可能的日期格式
另外,记住日期是一个很难解决的问题。在您的特定情况下,您可能希望确保日期与其时间和时区一起发送
另外,当你有时间的时候,帮你自己做一个“龙目计划”来帮助那些能干和能干的人。它将为您节省大量样板代码,在getter和setter的情况下,这些代码常常是意外问题的根源。由于控制器仅部分发布(即:仅发布方法,而非完整类),我将假设它与所获得的一样简单,并且已被注释为@RestController 看起来,对象和传递的JSON负载之间存在一些差异 生成控制器将接受的JSON的一种简单方法是在控制器中公开一个方法,该方法不接受任何参数作为输入,而是生成一个航班作为输出。然后,您可以将该输出用作构建后续JSON请求的模板 尝试发布以下JSON:
{
"code" : "THY1770",
"route": {
"from": {
"code": "ABC",
"name": "My Airport 1"
},
"to": {
"code": "DEF",
"name": "My Airport 2"
}
}
"departure" : null,
"arrival" : null
}
请注意,在我的回答中,我已将日期设置为空。对于那些你必须确保你提供的格式被接受。使用我在开始时解释的技巧,尝试找出一种可能的日期格式
另外,记住日期是一个很难解决的问题。在您的特定情况下,您可能希望确保日期与其时间和时区一起发送
另外,当你有时间的时候,帮你自己做一个“龙目计划”来帮助那些能干和能干的人。它将为您节省大量样板代码,在getter和setter的情况下,这些代码往往是意外问题的根源。我尝试过,但得到了以下结果:Flight{code='null',route=null,department=null,arrival=null}我尝试过,但得到了以下结果:Flight{code='null',route=null,department=null,arrival=null}通过建立存储库类/接口,更容易获得有效的结果。对于flight,您可以创建一个空接口@RepositoryRestResource public Interface FlightRepository extensed crudepository,该接口允许您对所有flight集合进行基本crud访问,并且您不必创建任何可能出错的对象。通过建立存储库类/接口,更容易获得有效结果。对于flight,您可以创建一个空接口@RepositoryRestResource公共接口FlightRepository Extended Crudepository,该接口为您提供对所有flight集合的基本crud访问权限,并且您不必创建任何可能出现问题的对象