[英]Spring boot REST API Missing URI template variable
I have followed this tutorial to build REST API using Spring boot. 我已经按照本教程使用Spring Boot构建REST API。 It taught alot.
它教了很多东西。 But What I am trying to do really got me stuck.
但是我试图做的事情确实使我陷入困境。 What I am trying to get is:
我想要得到的是:
{
"marks":{
"id":"1",
"name":"test",
"remark":"passed",
"course": {
"id": "1",
"name": "Spring Boot",
"description": "Solves many problems",
"topic": {
"id": "1",
"name": "Java",
"description": "Powerful Programming Language"
}
}
But I get the error when I tried to add the marks- as : 但是当我尝试添加标记时出现错误:
{
"timestamp": 1515600105327,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.web.bind.MissingPathVariableException",
"message": "Missing URI template variable 'courseId' for method parameter of type String",
"path": "/topics/1/courses/1/marks"
}
My Marks Model is: 我的商标模型是:
public class Marks {
@Id
private String id;
private String name;
private String remark;
@ManyToOne
private Course course;
@ManyToOne
private Topic topic;
public Marks() {
}
public Topic getTopic() {
return topic;
}
public void setTopic(Topic topic) {
this.topic = topic;
}
public Marks(String id, String name, String remark,String topicId, String courseId) {
this.id = id;
this.name = name;
this.remark = remark;
this.topic = new Topic(topicId, "","");
this.course = new Course(courseId, " ", " ", " ");
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
}
And MarksController.java
: 和
MarksController.java
:
public class MarksController {
@RestController
public class MarksController {
@Autowired
private MarksService marksService;
@RequestMapping("/topics/{topicId}/courses/{id}/marks")
public List<Marks> getAllMarks(@PathVariable String courseId) {
return marksService.getAllMarks(courseId);
}
@RequestMapping(method=RequestMethod.POST, value="/topics/{topicId}/courses{courseId}/marks")
public void addMarks(@RequestBody Marks marks,@PathVariable String topicId ,@PathVariable String courseId) {
marks.setTopic(new Topic(topicId, "", ""));
marks.setCourse(new Course(courseId, "", "", ""));
marksService.addMarks(marks);
}
}
And MarksService.java
: 和
MarksService.java
:
public class MarksService {
@Service
public class MarksService {
@Autowired
private MarksRepository marksRepository;
public void addMarks(Marks marks) {
marksRepository.save(marks);
}
}
And MarksRepository.java
: 和
MarksRepository.java
:
public interface MarksRepository extends CrudRepository<Marks, String> {
public List<Marks> findByCourseId(String courseId);
public List<Marks> findByTopicId(String topicId);
}
Can anyone help me get the result as in the mentioned JSON. 任何人都可以帮助我获取上述JSON中的结果。
POST
method POST
方法 This: 这个:
/topics/{topicId}/courses{courseId}/marks
Should be: 应该:
/topics/{topicId}/courses/{courseId}/marks
Note the additional / between courses
and {courseId}
请注意
courses
和{courseId}
之间的附加/
GET
method GET
方法 This: 这个:
/topics/{topicId}/courses/{id}/marks
Should be: 应该:
/topics/{topicId}/courses/{courseId}/marks
Note the use of courseId
to agree with the parameter name in MarksController.getAllMarks
. 请注意,使用
courseId
与courseId
中的参数名称MarksController.getAllMarks
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.