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);
}
}