【问题标题】:REST returns xmlREST 返回 xml
【发布时间】: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


【解决方案1】:

这就是我为解决这个问题所做的。

我从我的项目中删除了所有 jersey 和 jackson jar。

从 glassfish 安装目录/模块中删除了所有 jersey 和 jackson jar。从泽西那里得到所有最新的罐子,然后把它们放在那里。

然后从 glassfish 中删除 osgi-cache 并重新启动服务器。这解决了我的问题,虽然我不能说到底发生了什么变化!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多