2016-01-15 1 views
0

Вот пример кода моего метода GET, который должен возвращать xml сериализованную версию ConfigurationProperty в качестве ответа.Служба RESTful Java не сериализуется ArrayList

Он сериализует модель ConfigurationProperty в большинстве случаев, за исключением случаев, когда value установлен в ArrayList.

Что может быть причиной и как его исправить, когда сериализация выполняется с использованием javax.ws.rs.Produces?

@GET 
@Path("{id}") 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public ConfigurationProperty getConfigurationProperty(@PathParam("id") Id id) 
{ 
    ConfigurationProperty cp = service.get(ConfigurationProperty.class, id); 
    return checked(cp); 
} 

Содержание cp:

cp DefaultConfigurationProperty (id=293) 
    __scsIsPartialObject false 
    __scsTransientServiceFields HashMap<K,V> (id=312) 
    createdBy "migration" (id=313)  
    createdOn Date (id=314) 
    id Id (id=315)  
    key "catalog/cron/product_status_export/try_languages" (id=316) 
    merchantIds null  
    modifiedBy null  
    modifiedOn null  
    requestContextIds null  
    storeIds null  
    value ArrayList<E> (id=317) 
     elementData Object[10] (id=326)  
      [0] MongoValue (id=13837) 
       object "de" (id=13846) 
      [1] MongoValue (id=13838) 
       object "en" (id=13853) 
      [2] MongoValue (id=13839) 
       object "global" (id=13860) 
     modCount 3 
     size 3 
    version null  

MongoValue.java:

import java.math.BigDecimal; 
import java.math.BigInteger; 
import java.util.Date; 
import java.util.UUID; 

import com.app.core.service.api.Value; 
import com.app.core.type.TypeConverter; 

public final class MongoValue implements Value 
{ 
    Object object = null; 

    public MongoValue(Object object) 
    { 
     this.object = object; 
    } 

    @Override 
    public String getString() 
    { 
     return TypeConverter.asString(object); 
    } 

    @Override 
    public Integer getInteger() 
    { 
     return TypeConverter.asInteger(object); 
    } 

    @Override 
    public Long getLong() 
    { 
     return TypeConverter.asLong(object); 
    } 

    @Override 
    public Double getDouble() 
    { 
     return TypeConverter.asDouble(object); 
    } 

    @Override 
    public Float getFloat() 
    { 
     return TypeConverter.asFloat(object); 
    } 

    @Override 
    public Short getShort() 
    { 
     return TypeConverter.asShort(object); 
    } 

    @Override 
    public Boolean getBoolean() 
    { 
     return TypeConverter.asBoolean(object); 
    } 

    @Override 
    public BigDecimal getBigDecimal() 
    { 
     return TypeConverter.asBigDecimal(object); 
    } 

    @Override 
    public BigInteger getBigInteger() 
    { 
     return TypeConverter.asBigInteger(object); 
    } 

    @Override 
    public Character getChar() 
    { 
     return TypeConverter.asCharacter(object); 
    } 

    @Override 
    public <E extends Enum<E>> E getEnum(Class<E> enumType) 
    { 
     return TypeConverter.asEnum(enumType, object); 
    } 

    @Override 
    public UUID getUUID() 
    { 
     return TypeConverter.asUUID(object); 
    } 

    @Override 
    public String getAscii() 
    { 
     return TypeConverter.asASCII(object); 
    } 

    @Override 
    public Date getDate() 
    { 
     return TypeConverter.asDate(object); 
    } 

    @Override 
    public Object getRaw() 
    { 
     return TypeConverter.asRaw(object); 
    } 

    @Override 
    public String toString() 
    { 
     return String.valueOf(object); 
    } 
} 
+0

'MongoValue', кажется, быть причиной этого. –

+0

Я добавил '@XmlRootElement()', как вы сказали, с пустыми скобками, и это не сработало. –

+0

Никакое исключение, связанное с этим, не отображается в моем журнале. Я вижу только ответ исключения в браузере: '500 Internal Server Error' –

ответ

0

Это звучит, как вы, возможно, потребуется добавить пользовательский сериализатор для поля валютирования DefaultConfigurationProperty. Вы должны выполнить это с помощью пользовательского сериализатора Jackson [1].

[1] http://wiki.fasterxml.com/JacksonHowToCustomSerializers