У меня есть следующий очень простой объект PojoИзменения поля в объекте данных в результате исключения Непризнанных полей
Рабочая версия
package com.example.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Employee {
long id;
String firstName;
String lastName;
public long getId() {
return id;
}
public void setId(long l) {
this.id = l;
}
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;
}
}
тело запроса JSON, что я использовал
{"id": "23", "firstName": "John", "lastName": "Smith"}
Модифицированная версия, которая в результате непризнанных поле
package com.example.model;
public class Employee {
long id;
**String firstEmpName;** // Resulting in unrecognized Field
**String lastEmpName;** // Resulting in Unrecognized Field
public long getId() {
return id;
}
public void setId(long l) {
this.id = l;
}
public String getFirstName() {
return firstEmpName;
}
public void setFirstName(String firstName) {
this.firstEmpName = firstName;
}
public String getLastName() {
return lastEmpName;
}
public void setLastName(String lastName) {
this.lastEmpName = lastName;
}
}
После изменения имени и фамилии в firstEmpName и lastEmpName, я попытался отправить нижеприведенный тело запроса
тело запроса JSON, что я использовал
{ "ID": "23", "firstEmpName": "Джон", "lastEmpName": "Смит"}
Исключение я получил
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "firstEmpName" (Class com.example.model.Employee), not marked as ignorable
at [Source: [email protected]; line: 1, column: 29] (through reference chain: com.example.model.Employee["firstEmpName"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
Остальной примера приложения выглядит следующим образом:
@Override
public Restlet createInboundRoot() {
// Create a router Restlet that routes each call to a
// new instance of HelloWorldResource.
Router router = new Router(getContext());
// Defines only one route
router.attach("/employees/{id}", SampleAppRestlet_ServerServlet.class);
return router;
}
public class SampleAppRestlet_ServerServlet extends ServerResource {
@Get
public Employee getEmployee(){
Employee m = new Employee();
m.setFirstName("John");
m.setLastName("Smith");
m.setId(23);
return m;
}
}
Everytime я изменить имя поля, мне нужно сделать что-то для этого поля, чтобы быть признанным.
Я также пытался использовать Jax-rs вместо Restlet, я все еще вижу ту же проблему.
Итак, чтобы суммировать проблему, с которой я столкнулся, независимо от того, что я создаю в первый раз, это то, что остается и работает. Если я изменяю любые поля в POJO, как указано выше, например, from firstName - firstEmpName, я получаю исключение выше. Я попытался очистить классы, перезапустил сервер. Удален local_db.bin и даже изменил имя класса Pojo на другое и попытался, но он все еще не работает. Кстати, я использую движок Google App. Рестайлем sdk, который я использовал, была версия GAE для Restlet sdk. Также я попробовал JAX-RS. Я разрешил конфликты библиотеки, и все работает в первый раз, когда я пытаюсь, и если я изменяю имена полей, то в случае JAX-RS он молча игнорирует те поля, имена которых были изменены.
Любые догадки или мысли или предложения очень ценятся.
Когда вы задаете вопрос о StackOverflow, отправьте версию кода, который НЕ работает, а не код, который он использовал, когда он работал. Хорошо, вы можете опубликовать обе версии, но последняя не так важна, как первая. –
Спасибо за предложение. Я отредактировал его. –