我意识到这有点不稳定,但是我想使用Jersey客户端GenericMessage
使用Java序列化作为“编组”
将Spring
Integration发送到Jersey服务器。是否对此具有内置或贡献支持,还是我必须编写自己的MessageBodyReader
/
Writer?我试图在客户端请求的类型设置到两个“应用程序/
x-java的序列化对象”,并MediaType.APPLICATION_OCTET_STREAM_TYPE
和它只是提供了常用的:
ClientHandlerException: A message body writer for Java type,
class org.springframework.integration.message.GenericMessage,
and MIME media type, application/x-java-serialized-object, was not found
谷歌和泽西岛用户指南都对这一主题感到奇怪。我也接受另一种方法,允许将任意内容发送GenericMessage
到Jersey
API。我不一定要进行序列化。似乎是处理具有任意有效负载类型的消息的最简单途径。
我仍然没有找到一个,显然也没有人知道,所以我使用Commons
Lang的SerializationUtils
编写了自己的快速实现来为我做些肮脏的工作:
import org.apache.commons.lang.SerializationUtils;
import org.springframework.stereotype.Component;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
/**
* Created with IntelliJ IDEA.
* User: ryan
* Date: 2/25/13
* Time: 2:07 PM
*/
@Component
@Provider
public class SerializationMessageBodyReaderAndWriter
implements MessageBodyReader<Serializable>, MessageBodyWriter<Serializable> {
public static final String APPLICATION_JAVA_SERIALIZED_OBJECT =
"application/x-java-serialized-object";
public static final MediaType APPLICATION_JAVA_SERIALIZED_OBJECT_TYPE =
MediaType.valueOf(APPLICATION_JAVA_SERIALIZED_OBJECT);
@Override
public boolean isReadable(Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType) {
return mediaType.isCompatible(APPLICATION_JAVA_SERIALIZED_OBJECT_TYPE)
&& Serializable.class.isAssignableFrom(type);
}
@Override
public Serializable readFrom(Class<Serializable> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType,
MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) {
return (Serializable) SerializationUtils.deserialize(entityStream);
}
@Override
public boolean isWriteable(Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType) {
return mediaType.isCompatible(APPLICATION_JAVA_SERIALIZED_OBJECT_TYPE)
&& Serializable.class.isAssignableFrom(type);
}
@Override
public long getSize(Serializable o,
Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType) {
return -1;
}
@Override
public void writeTo(Serializable o,
Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) {
SerializationUtils.serialize(o, entityStream);
}
}
我试图让Jersey在我返回对象时序列化它们,就像这样: 当我用例如“john”对此执行POST请求时,它应该用的json表示来响应。但是,它所做的只是给出错误状态500,服务器记录以下内容 全局阅读器拦截器:org.glassfish.jersey.server.internal。MappableExceptionWrapperInterceptor是全局编写器拦截器:org.glassfish
问题内容: 我在尝试序列化包含 即使我写了: 并应用: 我仍然无法序列化此类: Stacktrace :(在pastebin上完整) 有什么办法吗? 问题答案: 您的问题是那是一个。假设您使用它将在Windows PC上创建类似的实例。现在,您必须告诉GSON如何反序列化此类型: 您可以使用的另一种方法是: typeHierarchyAdapter的目的是在您希望为类型的所有子类型使用相同的表示形
我得到了以下代码: 我得到了这个: {"时间":{"小时": 20,"分钟": 49,"秒": 42,"纳米": 99000000,"一天": 19,"一天":"星期四","月":"一月","一天": 19,"年": 2017,"月值": 1,"年表":{"id":"ISO","calendarType":"iso8601"}}} 我要实现的是ISO8601中的字符串 2017-01-19T18:
问题内容: 使用Jersey和Jackson创建REST接口,当其中包含0或1个元素时,如何将列表字段序列化为列表。例如: 当bar没有元素时,结果序列化为;当它包含单个元素时,结果序列化为该元素,而不是包含单个元素的数组。有没有办法让它们始终序列化为数组? 作为参考,我使用的是Jersey 1.10和Jackson 1.9.2。 问题答案: 我很确定您实际上并没有使用Jackson(JSON序列
问题内容: 我有一个使用Jersey实现的JAX-RS REST服务。JAX-RS / Jersey的很酷的功能之一是,只需添加一些Java批注,就可以将POJO轻松转换为REST服务…包括使用JAXB批注将POJO转换为JSON的简单方法。 现在,我希望能够将这个酷炫的JSON修饰功能用于非REST用途-我很希望能够将其中一些对象序列化为JSON文本到磁盘。这是我要序列化的示例JAXB对象: J
问题内容: 我并不是要特别解决任何问题,而是要努力学习球衣。 我有一个标记为这样的实体类: 以及相应的球衣服务 给出正确的XML响应。假设我想编写一个MessageBodyWriter,它复制相同的行为,并产生一个XML响应,我该怎么做? 通过使用@Provider批注进行标记,我可以看到邮件正文编写器已正确调用。 当调用writeTo时,对象o是一个Vector,类型GenericType是一个