泽西2中的HashMap到JSON响应

时间:2016-03-24 15:56:31

标签: java json jersey jersey-2.0

我的代码:

@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.

实现这一目标的最简单方法是什么?感谢

2 个答案:

答案 0 :(得分:2)

如果您想使用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

答案 1 :(得分:1)

我所知道的最简单的方法是使用ObjectMapper,并将map传递给它的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