我正在尝试保存一个对象评级,其中有另一个移动的,所以它包括一个等级和一个手机。
下面是移动的实体:
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Mobile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
}
这里是评级实体
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Rating {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Mobile mobile;
private int grade;
}
RatingService类中的方法saveRating
public Rating saveRating(Rating rating) {
Rating theRating = new Rating();
Mobile theMobile = mobileRepo.getById(rating.getMobile().getId());
theRating.setGrade(rating.getGrade());
theRating.setMobile(theMobile);
return ratingRepo.save(theRating);
}
和方法,用于在休息控制器中保存
@Autowired
private RatingService ratingService;
@RequestMapping(value = "/rating", method = RequestMethod.POST)
public Rating newRating(@RequestBody Rating rating){
return ratingService.saveRating(rating);
}
我有所有的@Service @RestController @Autowired注解。其他的工作包括保存移动的,删除和查看它,甚至查看我手动添加到数据库中的评级。我已经尝试在控制器和RatingService中改变newRating方法,它只获取移动设备ID和等级,然后通过mobileRepository找到移动设备并将其保存为移动设备进行评级,但我没有取得进展。所以我又回到了这个方法,从女巫我已经开始了。它似乎很简单做到这一点,但目前还不是。这里是 Postman 的结果:This is from postman
1条答案
按热度按时间koaltpgm1#
目前,您正尝试将值“移动的”=1、“rating”=4Map到具有字段“id”、“mobile”(非整数)和“grade”的示例,因此您会收到
Bad Request
的响应,因为提供的JSON与指定的(@RequestBody)Java类型不匹配。您可以引入以下dto,而不是将实体用作DataTransferObjects
然后,您的请求还应在名为
mobileId
的字段中包含移动的的ID,以匹配dto。您的控制器端点将如下所示: