запрос, отправленный клиентом, был синтаксически неправильным при отправке почтовых запросов

Метод в 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;
    }
}

person Vishwa    schedule 26.02.2014    source источник
comment
Покажи нам свой Dependent класс. Кроме того, включите уровень журнала для отладки и проверьте журналы.   -  person Sotirios Delimanolis    schedule 26.02.2014
comment
Добавлен зависимый класс.   -  person Vishwa    schedule 26.02.2014
comment
Вы отправляете строку запроса, чтобы Spring мог сгенерировать @ModelAttribute? Откуда вы ожидаете, что он будет сгенерирован?   -  person Sotirios Delimanolis    schedule 26.02.2014
comment
Я отправляю запрос POST в формате JSON   -  person Vishwa    schedule 26.02.2014


Ответы (3)


синтаксически неправильный означает проблему с json, пожалуйста, замените одинарную кавычку на двойную.

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

также проверьте, что ключи json должны совпадать с именами атрибутов вашего зависимого класса, а данные должны быть конвертируемы синтаксическим анализатором.

person RPaul    schedule 28.02.2014
comment
Спасибо за ответ. Я исправил свой json, и когда я изменил уровень журнала на отладку, он показал, что мне не хватает пустого конструктора. Теперь все работает, всем спасибо. - person Vishwa; 01.03.2014
comment
я изменил уровень журнала на отладку, он показал, что мне не хватает пустого конструктора. Расскажите, пожалуйста, как эти журналы были добавлены в приложение. - person prime; 12.04.2016
comment
Эта ошибка возникает из-за того, что в классе отсутствует конструктор по умолчанию, добавьте конструктор по умолчанию, и все будет работать public Dependent() { } - person abosancic; 09.10.2016

Ошибка *Запрос, отправленный клиентом, был синтаксически неправильным"** в большинстве случаев означает, что jackson не может опреснить (преобразовать строку 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() {
}
person abosancic    schedule 08.10.2016

При использовании curl (в dos) у меня была такая же проблема. Мне нужно было использовать все двойные кавычки и, следовательно, замаскировать те, что внутри части тела: C:>curl -H "Content-Type: application/json" -X POST -d "{\"id\":1,\"firstName \":\"Ханс\",\"фамилия\":\"Сборник\"}" http://localhost:8081/persons

person Hapes    schedule 28.05.2015