【问题标题】:JAX-RS + RESTEasy service return JSON String without double quoteJAX-RS + RESTEasy 服务返回不带双引号的 JSON 字符串
【发布时间】:2011-10-09 17:06:30
【问题描述】:

我是 JAX-RS + RESTEasy 的新手

阻碍我的是服务返回不带双引号的 JSON 字符串。

@Path("/hello")
public class HelloService {

    @GET
    @Path("say")
    @Produces(MediaType.APPLICATION_JSON)
    public String say() {
        return "Hello";
    }
}

当我调用“/hello/say”时,它只会返回 Hello,但我期待的是 “Hello”

用 Google 搜索了几天。我有一段使用 JQuery 的 Javascript,它像这样调用服务:

$(function(){
    $.ajax({
            url : "services/hello/say",
            context : $('#message'),
            success : function(data){
                    $(this).html(data);
                },
            error : function(xhr, ajaxOptions, thrownError){
                    $(this).html(xhr.status + "<br>" + thrownError);
                }   
        });
    });

这就是结果

SyntaxError: Unable to parse JSON string

虽然状态是 200。 有没有办法解决这个问题,而不是手动将双引号添加到字符串中?

【问题讨论】:

    标签: java rest jax-rs resteasy


    【解决方案1】:

    您将哪种 JSON 实现与 RESTeasy、Jettison 或 Jackson 一起使用?


    刚刚尝试了 Jettison,同样的问题。我只是查看了 JSON 规范,并从那里写入,值本身不是有效的 JSON 响应(请参阅http://www.json.org/)。你要么有一个对象,要么有一个值数组。

    我想这可能是问题所在,因为 RESTeasy 不知道该怎么做,因为您不返回 Object 并且不返回单一类型(例如 String、Integer...)。

    想知道如果返回一个数组会发生什么。

    【讨论】:

    • 感谢您的回复,String数组的结果是["Hello","World"]。我猜是正确的
    • 完美。因此,正如 json.org 站点所指定的,有效的 JSON 是一个对象或一个值数组。
    • 啊,我明白了。感谢您的帮助:)
    【解决方案2】:

    问题不在于框架,而在于您的代码。根据 JAX-RS,方法签名 public String say() 表示您从该方法返回的 String 是要在响应中返回的实体。不做进一步处理。我会链接相关文档,但他们使用的现场 jcp.org 似乎已经消失了。如果你想让你的 RESTEasy 为你做 JSON 编组,你需要返回一个 POJO。

    【讨论】:

      【解决方案3】:

      我建议您使用 Jackson JSON 提供程序。您只需在项目的构建路径中添加 resteasy-jackson-provider.jar。将注释 @Produces("application/json") 分配给您的业务服务中的方法。你准备好了。干杯!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-14
        • 2020-09-08
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多