我是Spring Boot Rest的新手,正在尝试使用post ab对象作为rest请求。但这不起作用,而且我得到的是null回报:
这是我要发布的对象:
public class Flight {
private String code;
private Route route;
private LocalDateTime departure;
private LocalDateTime arrival;
//Constructor
//Getters and Setters
}
这是 Route 类:
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
}
这是我的控制器:
@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;
}
这是我的 JSON :
{ "flight": {
"code" : "THY1770",
"route": {
"airport": [
{ "code": 1, "name": "IST" },
{ "code": 2, "name": "STG" }
],
"departure" : "2014-01-01",
"arrival" : "2014-01-01"
}
}
}
当我发布此JSON时,我就得到了:
航班详细信息为: 空值 空值 空值 空
答案 0 :(得分:1)
控制器本身内部的代码可能是错误的:
复制inputPayload
的引用然后在同一对象上调用setter是没有道理的:
我认为,鉴于在toString
类中实现的Flight
,您可以:
@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;
}
现在,所有的映射都正确完成了,并且注释也按要求放置了,因此,如果它不起作用,则错误可能出在其他地方(未发布在问题中)。
答案 1 :(得分:1)
由于控制器仅部分发布(即:仅发布方法,而不发布完整的类),我将假定它是如此简单,并已注释为@RestController。
在对象和您传递的JSON有效负载之间似乎有一些差异。
生成控制器将接受的JSON的一种简单方法是在控制器中公开一个不使用参数作为输入并生成Flight作为输出的方法。然后,您可以将该输出用作模板来构建后续的JSON请求。
尝试发布以下JSON:
{
"code" : "THY1770",
"route": {
"from": {
"code": "ABC",
"name": "My Airport 1"
},
"to": {
"code": "DEF",
"name": "My Airport 2"
}
}
"departure" : null,
"arrival" : null
}
请注意,在我的回答中,我将日期设置为null。对于这些,您必须确保接受您提供的格式。使用我在开始时介绍的技巧尝试找出一种可能的日期格式。
此外,请记住,日期是一个很难解决的问题。在您的特定情况下,您可能需要确保将日期及其时间和时区一起发送。
此外,您还可以在有空的时候使用Project Lombok来进行吸气器和吸气器。它将为您节省很多样板代码,对于getter和setter来说,这常常是意料之外的问题的源头。