我使用Spring Boot创建了这个简单的REST API。
在这个应用程序中,我有一个名为Expense的POJO,有4个字段。我有一个没有Argument构造函数和另一个只带两个输入的构造函数。一个字符串值" item"和一个整数值"金额"。使用LocalData.now()方法设置日期,并在服务器中运行的MySql数据库中自动设置id。
这是我的实体类
@Entity
public class Expense {
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
private Integer id;
private String date;
private String item;
private Integer amount;
//No Arg Construction required by JPA
public Expense() {
}
public Expense(String item, Integer amount) {
this.date = LocalDate.now().toString();
this.item = item;
this.amount = amount;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public Integer getAmount() {
return amount;
}
public void setAmount(Integer amount) {
this.amount = amount;
}
}
我有另一个带有RestController注释的类,其中我设置了一个方法,使用Request Mapping注释使用post方法发布Expense对象。
@RestController
public class ExpController {
private ExpService expService;
private ExpenseRepo expenseRepo;
@Autowired
public ExpController(ExpService expService, ExpenseRepo expenseRepo) {
this.expService = expService;
this.expenseRepo = expenseRepo;
}
@RequestMapping(path = "/addExp", method=RequestMethod.POST)
public void addExp(Expense expense){
expenseRepo.save(expense);
}
}
现在我终于使用PostMan来发布HTTP Post Request。我已经制作了一个简单的Json格式文本来发送项目和金额
{
"item":"Bread",
"amount": 75
}
在我发布帖子请求后,我只能看到创建了一个新条目,但所有值都设置为空。
我做了一些实验,发现expenseRepo.save(expense)方法只使用默认的无Arg构造函数来保存数据。但它没有使用第二个构造函数来获取我通过邮递员传递的两个参数
如何解决这个问题。请帮忙
答案 0 :(得分:1)
像这样改变你的控制器方法
@RequestMapping(path = "/addExp", method=RequestMethod.POST)
public void addExp(@RequestBody Expense expense){
expenseRepo.save(expense);
}
您需要使用@RequestBody