REST发布请求

时间:2014-11-15 00:12:30

标签: java json rest jersey-2.0

当我尝试在服务器上发送消息时,响应是:不支持的媒体类型。 (415)

{
    "street": "Alex",
    "picture": "fsdfs"
}

我使用Jersey 2.7。我打电话给GET时很好,但问题出在POST方法上。 进入项目我包括org.glassfish.jersey.media:jersey-media-json-jackson和il \ ncluded code in like this topic

 public static void main(String[] args) throws Exception, RuntimeException {
        final Application application = new ResourceConfig()
                .packages("org.template")
                .register(JacksonFeature.class);

        server = new Server(PORT_NUMBER);
        ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
        servletContextHandler.addFilter(GuiceFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
        servletContextHandler.addServlet(DefaultServlet.class, "/*");

        server.start();
        server.join();

    }

简单API:

     @Path("/test")
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        public class ExampleAPI {

            @GET
            @Path("hello")
            @Produces(MediaType.TEXT_PLAIN)
            public String hello() {
                return "Hello World";
            }

            @POST
            @Path("/create")
    public Response create(BeanInfo bean) {

        return Response.created(UriBuilder.fromResource(BeanInfo.class)
                .path("{picture}").build(bean.getPicture()))
                .entity(bean.toString())
                .build();
    }
}

这里有什么问题?我应该将对象映射到json吗?

的BeanInfo:

    @JsonProperty("picture")
    private final String picture;

    @JsonProperty("street")
    private final String street;
    ...

2 个答案:

答案 0 :(得分:2)

这可能是因为您在调用服务时错误地设置了Content-Type标题。您必须将其设置为" application / json"。在我看来,您的服务器端已正确定义,问题出在客户端以及它如何调用API。

  

415不支持的媒体类型

     

415(不支持的媒体类型)状态代码表示     源服务器因为有效负载而拒绝为请求提供服务     是在目标资源上使用此方法不支持的格式。     格式问题可能是由于指示的请求     内容类型或内容编码,或作为检查的结果     数据直接。

答案 1 :(得分:1)

问题在于bean类。我使用了构建器模式,杰克逊无法对其进行解码。 我在类和构建器中添加了注释,现在工作正常。

@JsonDeserialize(builder = BeanInfo.Builder.class)
public class BeanInfo{ ...

和建设者:

@JsonPOJOBuilder(buildMethodName = "build", withPrefix = "set")
public static class Builder {...