Я новичок в Джерси и пытаюсь реализовать обработчик POST для простого ресурса REST Student, состоящего из имени и 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 для выполнения своих запросов. Вот запрос, который мне не подходит:
заголовок:
Content-Type : application/json
тело:
{
"cip": "gmar2104",
"name": "Marcel"
}
В том, что я делаю, определенно что-то не так, но я не могу понять, почему. Любая помощь будет оценена по достоинству. Спасибо.




Если у вас нет конструктора по умолчанию, Джексон не сможет создать экземпляр.
Попробуйте добавить конструктор по умолчанию:
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;
}
}
Джексон может создать экземпляр с нестандартным конструктором, используя @JsonCreator.
Это была одна проблема! Еще одна проблема заключается в том, что я не добавил аннотацию
@XmlRootElementк моему классу ресурсов. Если вы добавите это к своему ответу, я приму это.