【发布时间】:2011-12-26 09:02:30
【问题描述】:
我有一个返回 JAXB 对象的 REST Web 服务。我已将 Mediatype 作为 JSON 提供给该方法。我正在使用 ajaxForm 插件向这个 WebService 发送一些数据。
问题在于,尽管在 web 服务中将 JSON 作为媒体类型并在客户端 Javascript 中将其作为数据类型,但我仍然只得到 xmlDocument 作为返回的对象。
这是网络服务签名。我正在使用 Glassfish 3.1,并且所有功能都可以正确执行(在 server.log 中看到消息)。
@Path("GetJson")
public class GetJson
{
private static Logger logger = Logger.getLogger("GetJson");
@POST
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Exceldatalist getJson(@Context HttpServletRequest request)
{
这是客户端代码。形式是:
<form id="form3" action="http://comp1:8080/RestWSGS/jersey/GetJson" style="display:none"
enctype="multipart/form-data" method="post">
<input id ="username" name="username" type="hidden" />
<input id ="purpose" name="purpose" type="hidden" value="new" />
<input id ="filename" name="filename" type="hidden" />
<input id ="password" name="password" type="hidden" value="abc"/>
<input id ="company" name="company" type="hidden" value="Third"/>
<input id ="ignoreSheet" name="ignoreSheet" type="hidden" />
<input type="submit" style="display:none" />
</form>
ajaxForm 调用是:
$('#form3').ajaxForm({
url: 'http://comp1:8080/RestWSGS/jersey/GetJson',
async: false,
type: 'POST',
cache: false,
dataType: 'json',
contentType: "multipart/form-data",
processData: false,
success: function(data)
{
myData = data;
alert('success '+myData);
}
});
除此之外,表单只需要submit()。
我不明白我做错了什么。我现在被困在这里一段时间了...... 请帮我解开这个问题!
【问题讨论】:
-
REST Web 服务是由您托管还是由其他机构或客户托管?
-
因此您必须更改服务器响应以作为 JSON 对象发送,而不是作为 JAX(即)XML 对象发送。您的客户端代码是正确的,但 REST 服务器必须以 JSON 格式发送响应。 JAX 仅以 XML 格式发送。您已经手动处理它以将其作为 JSON 发送。
-
我已经从另一个具有相同设置并使用 glassfish 3.0 而不是 3.1 的客户端调用 web 服务,并且 jersey 使用 jackson 将其自动转换为 json,因为 dataType 为 'json'
-
所以 Glassfish 3.1 可能存在一些配置问题
-
任何关于我应该在哪里看的指针???
标签: jquery rest jquery-events ajaxform