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



我尝试为我的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();
    }
}

依赖列表:

  • Jackson-Annotations-2.8.6.jar
  • 杰克逊核2.8.6.jar
  • Jackson-Databind-2.8.6.jar
  • Jackson-Jaxrs-Base-2.8.6.jar
  • Jackson-Jaxrs-Json-Provider-2.8.6.jar
  • Jackson-Module-Jaxb-Annotations-2.8.6.jar
  • Jersey-All-2.22.2.2.2.jar
  • Publisher-5.3.1.Jar

我已经搜索了,有人说我需要在ResourceConfig中注册Jacksonjsonprovider,但是我该如何在AEM中进行?我目前的解决方法是将JSON发送为字符串,并使用我的方法中的com.fasterxml.jackson.databind.ObjectMapper将其映射到POJO。

不支持的媒体类型是响应jax-rs提供的可用" @produces"类型的列表与请求的"接受"标头中提供的任何值匹配。

您需要将HTTP Accept标头添加到客户端请求中。ACCEPT标题必须在可接受的响应类型列表中包含"应用程序/JSON"。

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

最新更新