【问题标题】:REST post requestREST 发布请求
【发布时间】:2014-11-15 00:12:29
【问题描述】:

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

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

我使用 Jersey 2.7。调用 GET 时没问题,但问题出在 POST 方法上。 在项目中,我包含了 org.glassfish.jersey.media:jersey-media-json-jackson 和 il\n包含的代码,如 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 吗?

豆信息:

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

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

【问题讨论】:

    标签: java json rest jersey-2.0


    【解决方案1】:

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

    415 不支持的媒体类型

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

    【讨论】:

    • 好的,但是你必须正确配置它。我也使用 Postman 来测试我的 API,因此请查看此图像以了解如何正确配置它(注意“标题”部分)--> Image at TinyPic
    • 问题出在 bean 类上。
    • 感谢您的回答。当我的声望达到 15+ 时,我会投票
    【解决方案2】:

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

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

    对于建设者:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-18
      • 2012-12-06
      • 2015-06-08
      • 2015-06-29
      • 2023-03-07
      • 1970-01-01
      • 2018-05-07
      • 2021-03-31
      相关资源
      最近更新 更多