Java 如何向我的SpringREST项目发出正确的POST请求

Java 如何向我的SpringREST项目发出正确的POST请求,java,spring,spring-rest,Java,Spring,Spring Rest,我面临的问题是当我尝试执行POST请求时,例如: curl-H“Content”-X POST-d'{“Content”:“abc”}http://localhost:8080/posts 我最终得到了一个新帖子,但没有任何数据: { id: 4, content: null, comment: [ ] } 我从SQL文件中预加载了一些数据(我在项目中启用了H2): 我的实体: @Entity public class Post { @Id @GeneratedValue(st

我面临的问题是当我尝试执行POST请求时,例如:

curl-H“Content”-X POST-d'{“Content”:“abc”}http://localhost:8080/posts

我最终得到了一个新帖子,但没有任何数据:

{
id: 4,
content: null,
comment: [ ]
}
我从SQL文件中预加载了一些数据(我在项目中启用了H2):

我的实体:

@Entity
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String content;

   @OneToMany(cascade = CascadeType.ALL, mappedBy = "post")
   private Set<Comment> comment;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Set<Comment> getComment() {
        return comment;
    }

    public void setComment(Set<Comment> comment) {
        this.comment = comment;
    }
}
在我对这个问题的研究中,我学到了可以使用RestController,但是我的示例中没有使用它,因为我的代码来自我的学校项目,老师希望我们使用@ResponseBody等


我的@PostMapping方法缺少什么吗?还是我的curl语句错了

在您的案例中,
@modelatibute
不起作用的主要原因是,它受表单post参数的约束,并且您的案例中没有表单

其中使用
@RequestBody
可以直接获得请求正文。 这就是您的
@ModelAttribute
无法工作的原因

要使用
@modeldattribute
,您必须使用
modeldattribute

像下面这样

  <form:form method="POST" action="/posts"
      modelAttribute="posts">
        <form:label path="name">Name</form:label>
        <form:input path="name" />

        <form:label path="id">Id</form:label>
        <form:input path="id" />

        <input type="submit" value="Submit" />
    </form:form>
但当您对请求使用
curl
时,最适合获取post参数的是
@RequestBody


进一步阅读您的案例中
@modelatibute
不起作用的主要原因是,它受表单post参数的限制,并且您的案例中没有表单

其中使用
@RequestBody
可以直接获得请求正文。 这就是您的
@ModelAttribute
无法工作的原因

要使用
@modeldattribute
,您必须使用
modeldattribute

像下面这样

  <form:form method="POST" action="/posts"
      modelAttribute="posts">
        <form:label path="name">Name</form:label>
        <form:input path="name" />

        <form:label path="id">Id</form:label>
        <form:input path="id" />

        <input type="submit" value="Submit" />
    </form:form>
但当您对请求使用
curl
时,最适合获取post参数的是
@RequestBody


进一步阅读

如果调试
@PostMapping
方法,变量
p
中的属性值是多少?我猜
@modelatibute
注释有一些问题,请尝试使用
@RequestBody
一次,看看是否得到了postbody@Shubh成功了!你知道为什么吗?我问这个问题的原因是周四我有一个考试,我应该按原样使用示例代码。现在我已经更改了它,我将不得不解释为什么它会更改为RequestBody。如果调试
@PostMapping
方法,变量
p
中的属性值是多少?我想
@modelatibute
注释可能有问题,请尝试使用
@RequestBody
一次,看看是否收到了帖子body@Shubh成功了!你知道为什么吗?我问这个问题的原因是周四我有一个考试,我应该按原样使用示例代码。现在我已经更改了它,我将不得不为它更改为RequestBody的原因进行论证。
  <form:form method="POST" action="/posts"
      modelAttribute="posts">
        <form:label path="name">Name</form:label>
        <form:input path="name" />

        <form:label path="id">Id</form:label>
        <form:input path="id" />

        <input type="submit" value="Submit" />
    </form:form>
@PostMapping("/posts")
    public @ResponseBody String add(@ModelAttribute("posts") Post p){

        postRepository.save(p);

        return "{msg : Resource added }";
    }