如何使用JAX-RS和Jersey在Adobe AEM 6.2中发布json数据

问题描述 投票:0回答:1

我尝试为我的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
  • 新泽西州全2.22.2.jar
  • 出版商5.3.1.jar

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

jersey jax-rs aem
1个回答
0
投票

不支持的媒体类型是当可用的“@Produces”类型列表与请求的“accept”标题中提供的任何值不匹配时JAX-RS提供的响应。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.