Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回带有Jersey的字符串的JSON表示形式_Java_Javascript_Json_Dojo_Jersey - Fatal编程技术网

Java 返回带有Jersey的字符串的JSON表示形式

Java 返回带有Jersey的字符串的JSON表示形式,java,javascript,json,dojo,jersey,Java,Javascript,Json,Dojo,Jersey,我将使用Jersey设置REST Web服务。 目前,我对JSON中字符串或其他值类型的正确表示有点困惑。 以下是两个片段: @GET @Path("user") @Produces( MediaType.APPLICATION_JSON) public User user() { return new User("reini", "admin"); } 在浏览器中调用此方法将显示“良好”的JSON字符串,如下所示: {"name":"reini","role":"admin"} 我

我将使用Jersey设置REST Web服务。 目前,我对JSON中字符串或其他值类型的正确表示有点困惑。 以下是两个片段:

@GET
@Path("user")
@Produces( MediaType.APPLICATION_JSON)
public User user() {
    return new User("reini", "admin");
}
在浏览器中调用此方法将显示“良好”的JSON字符串,如下所示:

{"name":"reini","role":"admin"}
我的第二种方法如下所示:

@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
    return "Hello " + name + ", it is " + new Date();
}
在浏览器中调用该方法将显示没有任何JSON内容的纯字符串(大括号等):

我想使用dojo工具包使用此服务。问题是,一旦设置[handleAs:“json”]-标志,我就会得到第二个方法的一个值。它向我抛出一个错误“SyntaxError:Unexpected token H”,其中“H”是返回字符串的第一个字母


那么:字符串和其他值类型的正确json表示是什么?我必须为生成这些值的方法设置哪些注释?

您应该定义一个
DTO
,并将您的
字符串放入其中。因此,您将拥有一个属性为一个字符串的
HelloResp
类。在方法中,填充该属性并返回

你可以检查一下。另一个


Firefox没有显示错误,因为它没有处理您的响应。将显示服务返回的内容。但是,工具箱开始将响应作为JSON处理,但不是有效的JSON(JSON以
{
开头)

您也可以将其作为以下内容返回:

@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
    return "\"Hello " + name + ", it is " + new Date()+'"';
}
但我觉得很奇怪

仅为一个字符串为每个对象创建DTO看起来也很奇怪


有更好的选择吗?

如果返回字符串,为什么要将其定义为JSON类型

只需将其作为纯文本返回(MediaType.text\u plain):


是为每个操作创建一个DTO更好,还是为我想要使用的每个类型创建一个DTO更好?“JSON以{”-开头不正确。根据我们的说法,即使是带引号的字符串文字也是有效的JSON,jersey也应该支持将字符串正确序列化为JSON字符串。您能解释一下为什么使用双引号(“”),而不仅仅是:return吗“某物”?我对此有一个问题,不明白为什么一个常规字符串没有转换为有效的json响应,原因是这会返回MediaType应用程序json,您可以手动返回一些json作为“{”a\“:1}”,这不是一个字符串。请参阅已批准的答案
@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
    return "\"Hello " + name + ", it is " + new Date()+'"';
}
@GET
@Path("hello/{name}")
@Produces( MediaType.TEXT_PLAIN)
public String hello(@PathParam("name") String name) {
    return "Hello " + name + ", it is " + new Date();
}