【问题标题】:Jersey generic object [duplicate]泽西通用对象[重复]
【发布时间】:2018-01-31 01:11:51
【问题描述】:

我正在使用 Jersey 作为我的 JSON 句柄来处理 REST 服务。我想做一个使用通用对象的方法。有没有办法在没有 bean 类的情况下对其进行反序列化?

JSON:

{
    "id": "2",
    "name": "John"  
}

当前方法(使用 bean 类):

@Path("/loginCheck")
    @POST
    @Consumes({ MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_JSON })
    public Object checkLoginStatus(Object a) {
      // Check login status function
    }

我正在阅读有关可能工作的 HashMap 的内容,或者可能将我的带有内部类的 Object 转换为相同的方法。

有什么想法吗?谢谢。

【问题讨论】:

  • 除了我的回答之外,我想问一下你想通过一种方法使用不同的对象来实现什么?可能有一些更简单的解决方案。
  • @AlekseiBudiak 你的答案看起来很棒,并且适用于这些简单的 json,但是当我有一个嵌套的 json 时,我想跳过一个 bean 的映射,比如只为反序列化但没有创建的时间类它。
  • 该解决方案应该适用于任何 JSON 对象(包括具有嵌套对象的对象)。除了我的建议之外,还有其他选择 - MessageBodyReaders。您可以使用它们将自定义反序列化逻辑添加到 Jersey。不幸的是,没有简单的方法来拥有某种特定于请求的时间类。
  • @Jarrod Roberson 这不是任何链接问题的重复。请仔细阅读。

标签: java json rest object jersey


【解决方案1】:

通过指定String参数类型,您可以通过单一方法实现消费任何东西。

@Path("/loginCheck")
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public Object checkLoginStatus(String pureJsonString) {
}

Map 表示仅适用于 application/x-www-form-urlencoded MIME 类型,因此如果您想使用 JSON,则不是您的情况。您可以在Jersey docs 中阅读有关此主题的更多信息。

【讨论】:

    【解决方案2】:

    基于 Aleksei 的回答,我找到了一个解决方案,我将其发布,希望对某人有所帮助:

                @Path("/loginCheck")
                @POST
                @Consumes({ MediaType.APPLICATION_JSON })
                @Produces({ MediaType.APPLICATION_JSON })
                public Object checkLoginStatus(String a) {
                    JSONObject jsonAnswer = new JSONObject();
                    ObjectMapper mapper = new ObjectMapper();
                    try {
                        JsonNode rootNode = mapper.readTree(a);
                        System.out.println(rootNode.get("id").getIntValue());
    
                    } catch (JsonProcessingException e) {
                        e.printStackTrace();
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 2013-11-08
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多