如何使用JAX-RS和Jersey

时间:2018-03-01 03:50:36

标签: jersey jax-rs aem

我尝试为我的AEM应用创建一个JSON API。当我将数据作为JSON发布到服务时,它总是抛出415错误:不支持的媒体类型。这就是我所做的:

JSON数据:

{ "fullName" : "myname"}

Java POJO类

public class FormDataBean {
    private String fullName;

    public String getFullName() {
        return fullName;

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
}

服务类

@Component(metatype = false)
@Service({JsonAPI.class})
@Path("/postdata")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public class JsonAPI
{
    @POST
    @Path("/form")
    public String getFormData(FormDataBean jsonData)
    {
        return formData.getFullName();
    }
}

依赖项列表:

  • 杰克逊 - 注解-2.8.6.jar
  • 杰克逊 - 芯 - 2.8.6.jar
  • 杰克逊 - 数据绑定-2.8.6.jar
  • 杰克逊 - JAXRS碱基2.8.6.jar
  • 杰克逊 - JAXRS-JSON-提供商-2.8.6.jar
  • 杰克逊模块-JAXB的注解-2.8.6.jar
  • Jersey的全2.22.2.jar
  • 发布商5.3.1.jar

我已经搜索过了一些主题说我需要在ResourceConfig上注册JacksonJsonProvider,但我怎样才能在AEM中进行注册?我目前的解决方法是将JSON作为String发送,并在我的方法中使用com.fasterxml.jackson.databind.ObjectMapper将其映射到POJO。

1 个答案:

答案 0 :(得分:0)

不支持的媒体类型是JAX-RS在可用的" @ Produces"列表中提供的响应。类型与"接受"中提供的任何值都不匹配。请求的标题。

您需要在客户端请求中添加http接受标头。 accept标头必须包含" application / json"在可接受的响应类型列表中。

例如,使用curl必须添加-H" Accept:application / json" to curl命令添加accept标头。如果您的客户端可以接受多种响应类型,则accept头可以是逗号分隔的值列表。