Джерси 2.27 Невозможно обработать POST - PullRequest
0 голосов
/ 03 июня 2018

Я новичок в Джерси и пытался реализовать обработчик POST для простого ресурса Student REST, состоящего из имени и CIP, который является другой строкой.Я использую Tomcat 8.5:

public class StudentResource {

    String m_name;
    String m_cip;

    public StudentResource(String p_name, String p_cip) { 
        m_name = p_name;
        m_cip = p_cip;
    }

    public String getName() {
        return m_name;
    }

    public void setName(String p_name) {
        m_name = p_name;
    }

    public String getCip() {
        return m_cip;
    }

    public void setCip(String p_cip) {
        m_cip = p_cip;
    }
}

Обработчик POST:

@Path("students")
public class StudentResourceHandler {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public StudentResource onNewStudent(StudentResource p_newStudent) {
        return p_newStudent
    }
}

Я хочу вернуть только то, что опубликовал ... Я смог обработать JSON снет ошибок в моем обработчике GET (т.е. возвращение JSON работает), но каким-то образом обработчик POST всегда завершается ошибкой с этим исключением:

javax.servlet.ServletException: javax.ws.rs.ProcessingException: Error deserializing object from entity stream.

Я использую RESTClient, чтобы мойЗапросы.Вот запрос, который мне не удался:

header:

  Content-Type : application/json

body:

  {
    "cip": "gmar2104",
    "name": "Marcel"
  }

Определенно что-то не так с тем, что я делаю, но я могуне могу найти почему.Любая помощь будет оценена.Спасибо.

1 Ответ

0 голосов
/ 03 июня 2018

Если у вас нет конструктора по умолчанию, Джексон не может его создать.

Попробуйте добавить конструктор по умолчанию:

public class StudentResource {

    String m_name;
    String m_cip;

    public StudentResource(String p_name, String p_cip) { 
        m_name = p_name;
        m_cip = p_cip;
    }

    //Default constructor 
    public StudentResource() {
    }

    public String getName() {
        return m_name;
    }

    public void setName(String p_name) {
        m_name = p_name;
    }

    public String getCip() {
        return m_cip;
    }

    public void setCip(String p_cip) {
        m_cip = p_cip;
    }
}
...