发送 post 请求时,客户端发送的请求在语法上不正确

Posted

技术标签:

【中文标题】发送 post 请求时,客户端发送的请求在语法上不正确【英文标题】:the request sent by the client was syntactically incorrect when sending post requests 【发布时间】: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 请求 【参考方案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

【讨论】:

以上是关于发送 post 请求时,客户端发送的请求在语法上不正确的主要内容,如果未能解决你的问题,请参考以下文章

Android 错误:MultipartEntity,客户端发送的请求在语法上不正确

验证表单“发送的请求在语法上不正确”时出现错误 400

从 vuejs 客户端向 oauth/token 发送 POST 请求时的 401 响应

axios post 请求挂在有效请求上

为啥http请求从客户端发送两次到服务器(OPTION和POST)[重复]

无法访问从 React 客户端到 Rails api 的 POST 请求中发送的参数