【问题标题】:Incorrect JSON entity produced from JAX-RS response builder从 JAX-RS 响应生成器生成的 JSON 实体不正确
【发布时间】:2014-09-25 08:47:32
【问题描述】:

在我的 JAX-RS 资源中,我有 authenticate 方法如下,它返回 Response 对象。

public Response authenticate(@QueryParam("username") String username,
    @QueryParam("password") String password) throws JSONException, org.json.JSONException {

    JsonObjectBuilder jsonObjBuilder = Json.createObjectBuilder();
    jsonObjBuilder.add( "auth_token", authToken );
    JsonObject jsonObj = jsonObjBuilder.build();

    System.out.println("jsonObject" + jsonObj);
    return Response.status(200).entity(jsonObj).build();
}

jsonObject 在我的打印语句中是完美的,但我的实际响应是用

构建的
Response.status(200).entity(jsonObj).build();

看起来像这样:

{"auth_token":{"valueType":"STRING"}}

我希望回复如下所示:

("auth_token":"b88c1d32-2056-4c57-926d-e8213e875b7d")

【问题讨论】:

  • authToken 变量来自哪里,它的类型是什么?在您的 sn-p 中没有显示如何检索此值。
  • 预期的响应不是 JSON,除非 () 是错字。
  • @Tom authtoken 只是一个随机字符串。
  • 我不确定我是否明白你的问题的重点。您的两个示例具有不同的值和格式。你的哪一部分有问题?值、格式还是两者兼而有之?
  • 你有MessageBodyWriterJsonObject 吗?在这个例子中JsonObject 是什么?

标签: java json jax-rs


【解决方案1】:

用简单的HashMap代替过于复杂的JsonObjectBuilder:

Map<String, String> jsonValues = new HashMap<>();
jsonValues.put("auth_token", authToken);
return Response.status(200).entity(jsonValues).build();

它应该生成:

{"auth_token":"b88c1d32-2056-4c57-926d-e8213e875b7d"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多