【问题标题】:the request sent by the client was syntactically incorrect when sending post requests发送 post 请求时,客户端发送的请求在语法上不正确
【发布时间】:2014-02-26 18:28:33
【问题描述】:

myController 中的方法是这样的

@RequestMapping(value="/{processId}/dependents", method=RequestMethod.POST,consumes="application/json")
@ResponseBody
public Dependents postdependent(@ModelAttribute ProcessContext process,@RequestBody Dependent dependent) {
    return process.getDependents().addDependent(dependent);
}

我的获取和删除工作完美。 但是每当我发帖时,我都会收到客户端发送的请求在语法上是不正确的。 用于发布请求的 JSON:

"{
   'dependentId' : '1003',
   'firstName'   : 'Vishu',
   'lastName'    : 'poodari',
   'birthDate'   : '1970/04/15'
}"

请我使用单引号尝试所有组合,双引号所有内容。

我正在使用 rest-shell 进行操作。

请找到我的依赖类

public class Dependent {
    private String dependentId;
    private String firstName;
    private String lastName;
    private String birthDate;
    @JsonCreator
    public Dependent(@JsonProperty("dependentId") String dependentId, @JsonProperty("firstName") String firstName, @JsonProperty("lastName")String lastName,
            @JsonProperty("birthDate") String birthDate) {
        this.dependentId = dependentId;
        this.firstName = firstName;
        this.lastName = lastName;
        this.birthDate = birthDate;
    }
    public String getDependentId() {
        return dependentId;
    }
    public void setDependentId(String dependentId) {
        this.dependentId = dependentId;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getBirthDate() {
        return birthDate;
    }
    public void setBirthDate(String birthDate) {
        this.birthDate = birthDate;
    }
}

【问题讨论】:

  • 向我们展示您的Dependent 课程。另外,将您的日志级别转为调试并检查日志。
  • 已添加依赖类。
  • 您是否发送查询字符串以便 Spring 可以生成 @ModelAttribute?您希望它从哪里生成?
  • 我正在发送 JSON 格式的 POST 请求

标签: json rest spring-mvc restful-url


【解决方案1】:

语法不正确表示json有问题,请将单引号替换为双引号。

{"dependentId" : "1003",
   "firstName"   : "Vishu",
   "lastName"    : "poodari",
   "birthDate"   : "1970/04/15"
}

还要检查 json 键是否应与您的 Dependent 类属性名称匹配,并且数据应可由解析器转换。

【讨论】:

  • 感谢您的回复。我更正了我的 json,当我将日志级别更改为调试时,它显示我缺少空构造函数。现在可以了,谢谢大家。
  • “我将日志级别更改为调试,它显示我缺少空构造函数”你能告诉我这些日志是如何添加到应用程序中的吗?
  • 发生此错误是因为类中缺少默认构造函数添加默认构造函数,一切都会正常工作 public Dependent() { }
【解决方案2】:

错误 *客户端发送的请求在语法上不正确"** 在大多数情况下意味着杰克逊无法脱盐(将json字符串转换为对象),因为缺少默认构造函数。

在您的情况下,缺少默认构造函数,您有参数化构造函数,它覆盖默认值并且杰克逊无法创建对象

public Dependent(@JsonProperty("dependentId") String dependentId, @JsonProperty("firstName") String firstName, @JsonProperty("lastName")String lastName,
        @JsonProperty("birthDate") String birthDate) {      this.dependentId = dependentId;
    this.firstName = firstName;
    this.lastName = lastName;
    this.birthDate = birthDate;
}

将默认构造函数添加到你的类中,一切都会正常工作

public Dependent() {
}

【讨论】:

    【解决方案3】:

    在使用 curl(在 dos 上)时,我遇到了同样的问题。我需要使用所有双引号,因此掩盖了正文部分中的双引号: C:>curl -H "Content-Type: application/json" -X POST -d "{\"id\":1,\"firstName\":\"Hans\",\"lastName\":\"集合\"}" http://localhost:8081/persons

    【讨论】:

      猜你喜欢
      • 2013-02-05
      • 1970-01-01
      • 2014-10-10
      • 2013-03-21
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 2013-12-30
      • 2019-02-20
      相关资源
      最近更新 更多