【问题标题】:HashMap to JSON response in Jersey 2Jersey 2 中的 HashMap 到 JSON 响应
【发布时间】:2016-03-24 15:56:31
【问题描述】:

我的代码:

@Path("/pac")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Component
    public class LDAPResource {
        @Autowired
        private LDAP_PAC_Service pacService;

        @GET
        @Path("/query/{userID}")
        public Response getPAC(@PathParam("userID") String userID) {
            return Response.ok().entity(pacService.getPAC(userID)).build();
        }
    }

pacService.getPAC(userID) 返回一个HashMap<String, String>

当我尝试返回 APPLICATION_JSON 时,它会咳嗽,我明白了

SEVERE: MessageBodyWriter not found for media type=application/json, type=class java.util.HashMap, genericType=class java.util.HashMap.

实现此目的最简单的方法是什么?谢谢

【问题讨论】:

    标签: java json jersey jersey-2.0


    【解决方案1】:

    如果你想使用Jackson as your JSON provider,添加这个依赖到你的 pom.xml 就足够了:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.22.2</version>
    </dependency>
    

    要查找其他选项,请参阅:https://jersey.java.net/documentation/latest/media.html

    【讨论】:

      【解决方案2】:

      我知道的最简单的方法是使用 ObjectMapper,并将地图传递给它的 writeValueAsString() 方法。例如:

      import com.fasterxml.jackson.databind.ObjectMapper;
      
          Map<String, String> mapData = new HashMap<>();
          mapData.put("1", "one");
          mapData.put("2", "two");
          ObjectMapper objectMapper = new ObjectMapper();
          objectMapper.writeValueAsString(mapData);
      

      返回的字符串是"{"2":"two","1":"one"}"。

      Jersey 内部包含 String 类型的实体提供程序,所以这应该可以工作。

      最好自己编写 MessageBodyWritter 以适应更多用例并简化流程。你可以找到文档here

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多