您好,我正在开发一个iOS项目,我正在向我的REST web服务发送一个json数组,该服务使用JAVA和Jersey以及Google Gson。我在SO上看到了几个类似的问题,比如link,但我不知道如何找到解决方案。这里我向服务器发送JSON数组,它的结构如下
{
"friendList": [
{"id": 1, "username": "user1", "name":"person1"},
{"id": 2, "username": "user2", "name":"person2"},
{"id": 3, "username": "user3", "name":"person3"},...
]
}
下面是我使用JSON数组的Java类
@Path("/FriendsList")
public class RestWebServicesAPI {
@POST
@Path("/friends")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Friends saveFriedList(Friends friend, @Context HttpServletRequest request) {
//What to write here?
return friend;
}
}
欢迎提供任何例子或解释。谢谢
首先编写带有JAXB注释的POJO类,然后编写一个从MessageBodyReader接口实现的类JSONMessageBodyReader。你必须而且应该用@Provider注释这个类
@Provider
@Consumes(MediaType.APPLICATION_XML)
public class JSONMessageBodyReader implements MessageBodyReader<Object> {
@Override
public Object readFrom(Class<Object> classType, Type rawType, Annotation[] annotation, MediaType mediaType,
MultivaluedMap<String, String> requestHeaderMap, InputStream inputStream)
throws IOException, WebApplicationException {
System.out.println("Message Body Reader");
JAXBContext context = null;
Unmarshaller unmarshaller = null;
Object obj = null;
try {
context = JAXBContext.newInstance(classType);
unmarshaller = context.createUnmarshaller();
obj = unmarshaller.unmarshal(inputStream);
} catch (JAXBException e) {
e.printStackTrace();
}
return obj;
}
@Override
`public boolean isReadable(Class<?`> classType, Type rawType, Annotation[] annotation, MediaType mediaType) {
if (classType.isAnnotationPresent(XmlRootElement.class)) {
return true;
}
return false;
}
}
JacksonJsonProvider。类用于将JSON数组编组和解编组到您的自定义BO(朋友),这些BO可以映射到mysql数据库中的数据。
您确实需要使用GSON将您的BO(朋友)转换为JSON对象。JacksonJsonProvider会为您做这件事。
可以使用jackson-all-1.9.11获得该类。罐子
你的类RestWebServicesAPI
必须实现接口MessageBodyReader
,使用它的两种方法isreadable
和readFrom
,在这里阅读关于这个接口的更多信息不要忘记用@Provider
注释
对你应该做的事情进行更详细的解释,请参阅“Java API for JSON Processing”一节,第43页。
问题内容: 我一直在搜寻我的屁股,试图找出如何做到这一点:我有一个Jersey REST服务。调用REST服务的请求包含一个JSON对象。我的问题是,从Jersey POST方法实现中,如何获得对HTTP请求正文中的JSON的访问? 任何提示,技巧,示例代码的指针,将不胜感激。 谢谢… -史蒂夫 问题答案: 我不确定如何获取JSON字符串本身,但是您当然可以获取其中包含的数据,如下所示: 定义一个
资源 ComplexObject类只是一个带有字符串的类。当我点击URL:http://localhost:8080/simple-service-webapp/webapi/myresource/This work时,我得到的是“get it!” 但是当我点击:http://localhost:8080/simple-service-webapp/webapi/myresource/comple
我有一个现有的Spring应用程序,它有自己的上下文,从Spring xml文件的douzens中引导。Grizzly web服务器开始发布Soap服务。 现在我也想满足同一只灰熊的Rest请求。我使用的是jersey-spring3,但它从所需的applicationContext.xml中启动自己的、独立的应用程序上下文。 这是创建注册Rest和Soap Web服务的Grizzly HttpS
如果有人能给我提供一个简单的POST/GET示例,使用一个合适的POJO对象模型,那就太好了。 我有限的理解是,OData将关于实际对象模型的任何信息从编译时移动到客户端的运行时。我很乐意忽略这一点,并针对固定对象模型编写代码,因为我们使用的服务不会改变。
我使用泽西和杰克逊访问一个REST Web服务,它正确地返回格式良好的JSON数据,但具有响应头: 内容类型:文本/html;字符集=UTF-8 即使我在请求头中指定了接受:应用程序/json,结果导致泽西抛出: org.glassfish.jersey.message.internal.MessageBodyProviderNotFound异常:找不到用于媒体类型=text/html; char
问题内容: 我正在将以下JSON字符串发送到我的服务器。 在服务器上,我有这个。 当我发送字符串时,它表明我得到了200的响应,但是其他两种方法从未运行。这是为什么? 问题答案: 我认为您正在将对象的使用与的使用混为一谈。 该对象用于将HTTP响应发送回调用方客户端,而您想访问的正文。请参阅此答案,它提供了一些指导。 如果您使用的是有效的JSON并通过进行发布,则可以使用中间件解析请求正文并将结果