2013-11-14 2 views
0

У меня есть следующий очень простой объект 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 он молча игнорирует те поля, имена которых были изменены.

Любые догадки или мысли или предложения очень ценятся.

+0

Когда вы задаете вопрос о StackOverflow, отправьте версию кода, который НЕ работает, а не код, который он использовал, когда он работал. Хорошо, вы можете опубликовать обе версии, но последняя не так важна, как первая. –

+0

Спасибо за предложение. Я отредактировал его. –

ответ

0

Свойства в Java Бобы определяются именами методов, а не именами полей. Поэтому вы должны переименовать методы get и set в соответствии с именами полей.

+0

Спасибо Робин за то, что нашли время, чтобы ответить. Это сработало. –

Смежные вопросы