Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful Java服务未序列化ArrayList_Java_Rest_Jax Rs_Jax Ws_Javax.ws.rs - Fatal编程技术网

RESTful Java服务未序列化ArrayList

RESTful Java服务未序列化ArrayList,java,rest,jax-rs,jax-ws,javax.ws.rs,Java,Rest,Jax Rs,Jax Ws,Javax.ws.rs,下面是我的GET方法的示例代码,它应该返回xml序列化版本的ConfigurationProperty,作为响应 它在大多数情况下序列化ConfigurationProperty模型,除非值设置为ArrayList 当使用javax.ws.rs.products完成序列化时,可能的原因是什么?我应该如何修复它 @GET @Path("{id}") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public

下面是我的
GET
方法的示例代码,它应该返回
xml
序列化版本的
ConfigurationProperty
,作为响应

它在大多数情况下序列化
ConfigurationProperty
模型,除非
值设置为
ArrayList

当使用
javax.ws.rs.products
完成序列化时,可能的原因是什么?我应该如何修复它

@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    

听起来您可能需要为DefaultConfigurationProperty的值字段添加自定义序列化程序。您应该可以使用Jackson自定义序列化程序[1]来完成这项工作


[1]

MongoValue
似乎是造成这种情况的原因。我用空括号添加了
@XmlRootElement()
,但它不起作用。我的日志中没有显示与此相关的异常。我只在浏览器中看到异常响应:
500内部服务器错误
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);
    }
}