当前位置: 首页 > 知识库问答 >
问题:

Spring控制器中帖子方法的请求体

高才
2023-03-14

我需要实现一个接受对象(json)的postendpoint。但对象中的某些参数是可选的。所以,当我尝试进行api调用时,它并没有映射到相应的方法。

显示页面未找到Err: 404

我发送的请求正文只包含两个字段,其余的都是可选的。

对象的Pojo

public class Post {
  private String owner;

  private String activity;

  private Boolean edited;

  private String clientApp;

  private String serviceProvider;

  private long id;

  private Text text;

  public static class Text {

    private String text;

    public String getText() {
      return text;
    }

    public void setText(String text) {
      this.text = text;
    }
  }

  public String getOwner() {
    return owner;
  }

  public void setOwner(String owner) {
    this.owner = owner;
  }

  public String getActivity() {
    return activity;
  }

  public void setActivity(String activity) {
    this.activity = activity;
  }

  public Boolean getEdited() {
    return edited;
  }

  public void setEdited(Boolean edited) {
    this.edited = edited;
  }

  public String getClientApp() {
    return clientApp;
  }

  public void setClientApp(String clientApp) {
    this.clientApp = clientApp;
  }

  public String getServiceProvider() {
    return serviceProvider;
  }

  public void setServiceProvider(String serviceProvider) {
    this.serviceProvider = serviceProvider;
  }

  public long getId() {
    return id;
  }

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

  public Text getText() {
    return text;
  }

  public void setText(Text text) {
    this.text = text;
  }

}

Spring控制器:

@RequestMapping(method = RequestMethod.POST, value="/publish/post",consumes = MediaType.APPLICATION_JSON_VALUE)
    public String publish(
      @RequestBody Post map) {
      logger.info("Post method")
      return "Completed";
    }

卷曲命令:

curl -X POST \
  http://localhost:4569/rest/publish/post \
  -H 'Content-Type: application/json' \  
  -d '{
    "owner": "Owner of the Company",
    "text": {
        "text": "Png new image"
    }
}'

有效载荷

{
"owner": "Owner of the Company",
"text": {
    "text": "Png new image"
}

}

Rest控制器:

@RestController
@RequestMapping("/rest")
public class SocialController {

    private static final Logger logger = LoggerFactory.getLogger(SocialController.class);

    @RequestMapping(method = RequestMethod.POST, value="/publish/post",consumes = MediaType.APPLICATION_JSON_VALUE)
    public String publish(
      @RequestBody Post map) {
      logger.info("Post method")
      return "Completed";
    }
}

共有1个答案

潘英豪
2023-03-14

您的URL中缺少应用程序根目录http://localhost:4569/[应用程序名称]/rest/publish/post

pojo中的可选字段在调用rest方法时不会产生问题。

 类似资料:
  • 我有以下代码 现在,当我去http://localhost:8080/recipe/2/update,点击提交,我调用@PostMap方法,更新后重定向我到 但是我在控制台上发现了这个错误 这个在网上 当我将@PostMap更改为@Request estMap或添加额外的@GetMaap时,一切正常 有人能解释一下吗?或者我该怎么做才能让@PostMapping按预期工作。 更新:如下面的评论所述

  • 在我的控制器中,我有一个用以下映射映射的方法:@PostMapping(“/”)。 此方法需要一个我试图捕获的请求主体,如下所述: 使用这两种方法对我来说都很好,我只是进退两难,如果直接在实体类中接受请求体是一个好主意和最佳实践的话。 我不想在controller类中公开我的实体类,因为我不确定这是否是一个好主意。 java 这两种方法都给出了相同的结果,更多的是关注要遵循的最佳实践。

  • 我正在使用Java和Spring构建一个RESTAPI,我需要在我的控制器中处理一个POST请求,但我需要从该请求中提取主体,它是一个JSON,也是该请求的“来源”, 我有几个问题:首先是如何获取该请求的来源(我猜是在标题中移动的url?),是否有与@RequestBody类似的注释?。 我的第二个问题是,在这种post方法中,通常应该返回什么对象作为响应。

  • 根据请求主体中的session_type,我必须将请求映射到特定的POJO(JSON->JAVA POJO)。 例如,如果请求正文中的'session_type'是'typeX',那么请求应该映射到ClassX POJO。如果请求正文中的“session_type”是“type y”,那么请求应该映射到ClassY POJO。 如果有一种方法可以使用某种requestbody注释来完成它呢?

  • 我已经研究了thymeleaf include和replace,但它们似乎只用于加载html片段,而不是整个Spring MVC请求

  • 我在Spring控制器的2个webservice中使用了相同的ArrayList,所以我想使用请求或会话范围从DB中获取一次,我尝试制作一个bean } 在控制器中 application context CTX = new AnnotationConfigApplicationContext(example bean。类);AttendeesBean attendee bean = CTX .