如何在 Spring rest 控制器中访问纯 json 主体?

新手上路,请多包涵

具有以下代码:

 @RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(@RequestBody String json) {
    System.out.println("json = " + json); // TODO json is null... how to retrieve plain json body?
    return "Hello World!";
}

尽管在正文中发送了 json,但 String json 参数始终为 null。

请注意,我不想要自动类型转换,我只想要普通的 json 结果。

这例如有效:

 @RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(@RequestBody User user) {
    return String.format("Hello %s!", user);
}

可能我可以使用 ServletRequest 或 InputStream 作为参数来检索实际主体,但我想知道是否有更简单的方法?

原文由 Marcel Overdijk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

到目前为止我发现的最好方法是:

 @RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(HttpEntity<String> httpEntity) {
    String json = httpEntity.getBody();
    // json contains the plain json string

让我知道是否还有其他选择。

原文由 Marcel Overdijk 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以只使用

@RequestBody String pBody

原文由 aGO 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题