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

如何在REST中创建POST请求以接受JSON输入?

佟阳飙
2023-03-14

我正在尝试学习RESTfulWeb服务。我正在创建一组简单的web服务。我开始在邮局工作时被卡住了。

我想将JSON输入传递给POST方法。这是我在代码中所做的:

@RequestMapping(value = "/create", method = RequestMethod.POST, consumes="application/x-www-form-urlencoded", produces="text/plain")
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody String createChangeRequest(MyCls mycls) {
    return "YAHOOOO!!"; 
}

我在POM. xml中包含了Jackson。

 <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-lgpl</artifactId>
    <version>1.9.13</version>
</dependency>   

MyCls是一个简单的类,包含一些getter和setter。

我从chrome的简单REST客户端调用上述POST服务。

URL: http://localhost:8080/MYWS/cls/create
Data: {<valid-json which corresponds to each variable in the MyCls pojo}

我看到以下答复:

415 Unsupported Media Type
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

我尝试在REST客户端的POST请求中添加标头为“应用程序/json”,但这没有帮助。

有人能告诉我我错过了什么吗?如何将输入JSON自动映射到MyCls pojo?我是否缺少任何配置?

编辑:MyCls。JAVA

public class MyCls{
   private String name;
   private String email;
   private String address;
       public String getName() {
    return name;
   }
   public void setName(String name) {
    name= name;
   }
       ---similar getter and setter for email, address--
}

来自chrome Simple REST客户端的json:

{"name":"abc", "email":"de@test","address":"my address"}

编辑:将我的控制器方法更改为以下内容,但仍然看到相同的错误:

@RequestMapping(value = "/create", method = RequestMethod.POST, consumes="application/json", produces="text/plain")
@ResponseStatus(HttpStatus.CREATED)
 public @ResponseBody String createChangeRequest(@RequestBody MyCls mycls) {
  return "YAHOOOO!!"; 
 }

共有1个答案

钦良弼
2023-03-14

假设您的客户端将应用程序/json作为其内容类型发送,然后将处理程序映射到

consumes="application/x-www-form-urlencoded"

我将无法处理它。实际的内容类型与预期的不匹配。

如果您期望的是application/json,那么应该是

consumes="application/json"

还有,宣布

public @ResponseBody String createChangeRequest(MyCls mycls) {

是(在默认环境中)等同于

public @ResponseBody String createChangeRequest(@ModelAttribute MyCls mycls) {

这意味着MyCls对象是从请求参数创建的,而不是从JSON主体创建的。相反,你应该

public @ResponseBody String createChangeRequest(@RequestBody MyCls mycls) {

因此Spring将JSON反序列化为类型为MyCls的对象。

 类似资料:
  • 我正在尝试使用circe在Akka-Http应用程序中执行我的JSON(de)序列化,而不是Spray-JSON。因此,我想使用指令和来获取请求主体的字符串表示,然后执行自己的反序列化。但是似乎太聪明了,它拒绝任何内容类型不为的东西。 我现在明白了,我误解了,它只会缩小而不会扩大解封程序将接受的内容类型范围。这就解释了为什么我的解决方案不起作用。

  • 问题内容: 如何从CherryPy中的POST请求接收JSON? 我去过此页面,尽管它在解释API,其参数及其作用方面做得很好。我似乎无法弄清楚如何使用它们将传入的JSON解析为一个对象。 这是我到目前为止的内容: 而且,这是我的jquery调用以发布帖子 问题答案: 工作示例: 链接到的文档介绍了3.2版中的几个CherryPy工具。该工具基本上可以更严格地完成上述操作,并使用3.2中的新主体处

  • 我试图使用回调API中的数据,该API以以下格式发送POST请求: 然而,我的API目前只在这样发送时工作: views.py: post数据中只会有一个对象,所以我正在寻找一个简单的工作,而不必重写我的序列化程序来解释一个post请求中的多个对象。

  • 我正在尝试使用以下代码在nodejs中执行HTTPS REST请求: 请求工作正常,但未如预期。正文将不以JSON格式发送,看起来像: RequestBody“:”Value1=abc1 输出应如下所示: RequestBody“:”[\r\n {\r\n \“Value3\”: \“3\”,\r\n \“Value2\”: \“abc2\”,\r\n \“Value1\”: \“abc1\”\r

  • 问题内容: data = { ‘ids’: [12, 3, 4, 5, 6 , …] } urllib2.urlopen("http://abc.com/api/posts/create”,urllib.urlencode(data)) 我想发送POST请求,但是其中一个字段应该是数字列表。我怎样才能做到这一点 ?(JSON?) 问题答案: 如果您的服务器期望POST请求为json,则您需要添加标

  • 本文向大家介绍playframework Java:接受JSON请求,包括了playframework Java:接受JSON请求的使用技巧和注意事项,需要的朋友参考一下 示例