我是WebServices的新手。我能够实现正常的get和post,但是当我尝试使用MediaType.APPLICATION_JSON实现post方法时。我收到了错误。请告诉我这里有什么问题。
<servlet>
<servlet-name>Bakchodi</servlet-name>
<servlet-Class>
com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Bakchodi</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>`
_----------------------
.......
package com;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="someName")
public class Pojo {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Pojo[name =" + name + "]";
}
}
status:415
server console:SEVERE: A message body reader for Java class com.Pojo, and Java type class com.Pojo, and MIME media type application/json was not found.
The registered message body readers compatible with the MIME media type are:
application/json ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
ASM,球衣{核心,服务器,客户端,捆绑,JSON,} andcommon-测井公司
请告诉我缺少的东西。
错误:
Controller
答案 0 :(得分:1)
您的帖子中缺少几个信息,例如URI结构,您正在使用的Servlet规范的版本,您调用资源的方式,......
无论如何,您可以查看以下内容:
您正在使用对我来说很奇怪的注释@POST()
,因此您最好删除括号:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_HTML)
public String x2(Pojo p) {
return "HI HI post jason" + p.getName();
}
正如您所指定的那样,您期望发出POST请求,这意味着您必须在请求正文中发送JSON文本,例如:
{ "name": "RAHUL" }
除非您使用HTML表单,否则普通浏览器不提供发送POST请求的方法(至少我不知道);所以你需要一些浏览器插件来发送JSON作为请求体;您可以使用Postman for Chrome或RESTClient for Firefox,...,或使用REST客户端框架,如Apache Wink,......
安装您喜欢的浏览器插件后,您必须将请求标头Content-Type
设置为application/json
,以便框架知道您正在发送JSON正文;我想这甚至是你得到status:415
)的原因。
答案 1 :(得分:0)
相同的代码运行(相信我,没有任何改变)..在我的系统重新启动后(我猜,因为它也引起了eclipse的重启).. 在此之前我正在进行maven-clean,maven安装,从tomcat配置中删除项目至少11-12次,但总是得到这个错误。
所以我想这对于那些想要在rest api中使用application / json的例子的人来说是有用的(对于发送请求你可以使用像Advanced rest client或postman这样的应用程序,或者你可以创建一个在html页面中形成并通过使用stringify()更改您的表单来提交json对象,然后提交它。我已经使用了ajax用于这个程序)