错误415不支持的媒体类型:POST如果未达到JSON REST,但它确实如果XML(Error 4

2019-06-17 14:26发布

我其实新REST WS但我真的不明白这415 Unsupported Media Type

我测试的Firefox我的海报REST和GET正常工作对我来说,也是POST (当它是一个application/xml ),但是当我尝试application/json并不没有达到WS在所有的服务器将拒绝它。

这是我的URL:http://本地主机:8081 / RestDemo /服务/客户/加

这是JSON我送{"name": "test1", "address" :"test2"}

这是XML我送:

<customer>
    <name>test1</name>
    <address>test2</address>
</customer>

这是我的资源类:

@Produces("application/xml")
@Path("customers")
@Singleton
@XmlRootElement(name = "customers")
public class CustomerResource {

    private TreeMap<Integer, Customer> customerMap = new TreeMap<Integer, Customer>();

    public  CustomerResource() {
        // hardcode a single customer into the database for demonstration
        // purposes
        Customer customer = new Customer();
        customer.setName("Harold Abernathy");
        customer.setAddress("Sheffield, UK");
        addCustomer(customer);
    }

    @GET
    @XmlElement(name = "customer")
    public List<Customer> getCustomers() {
        List<Customer> customers = new ArrayList<Customer>();
        customers.addAll(customerMap.values());
        return customers;
    }

    @GET
    @Path("/{id}")
    @Produces("application/json")
    public String getCustomer(@PathParam("id") int cId) {
        Customer customer = customerMap.get(cId); 
        return  "{\"name\": \" " + customer.getName() + " \", \"address\": \"" + customer.getAddress() + "\"}";

    }

    @POST
    @Path("/add")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public String addCustomer(Customer customer) {
         //insert 
         int id = customerMap.size();
         customer.setId(id);
         customerMap.put(id, customer);
         //get inserted
         Customer result = customerMap.get(id);

         return  "{\"id\": \" " + result.getId() + " \", \"name\": \" " + result.getName() + " \", \"address\": \"" + result.getAddress() + "\"}";
    }

}

编辑1:

这是我的Customer类:

@XmlRootElement 
public class Customer implements Serializable {

    private int id;
    private String name;
    private String address;

    public Customer() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

Answer 1:

问题是在bean客户的反序列化。 你的程序知道如何做到这一点的XML,与JAXB丹尼尔正在撰写,但最有可能不知道如何做到这一点的JSON。

在这里,你有RestEasy的/杰克逊为例http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/

与新泽西州一样: http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/



Answer 2:

添加Content-Type: application/jsonAccept: application/json的REST客户端头部分



Answer 3:

以防万一,这是有帮助的人,这是我的故事:

我发现这个线程,因为我,而我是用邮差测试数据发送到我的RESTEasy服务器遇到一个问题的结果,而─一个显著代码变化 - 我得到什么,但415个不支持的媒体类型错误后。

长话短说,我撕东西展现出来,最终我想跑,我知道工作的琐碎文件上传例子。 事实并非如此。 这时候,我意识到这个问题是我的邮差请求。 我通常不发送任何特殊的头,但是在之前的测试中,我增加了一个“内容类型”:“应用/ JSON的”头。 当然,我要上传“的multipart / form-data的。” 删除它解决了我的问题。

道德:检查你的头,你吹你的世界面前。 ;)



Answer 4:

我有这个问题,发现问题是我还没有注册的JacksonFeature类:

// Create JAX-RS application.
final Application application = new ResourceConfig()
    ...
    .register(JacksonFeature.class);

如果不这样做,你的应用程序不知道如何将JSON转换为Java对象。

https://jersey.java.net/documentation/latest/media.html#json.jackson



Answer 5:

我有同样的问题:

卷曲-v -H “内容类型:应用程序/ JSON” -X PUT -d“{ “名”: “JSON”, “姓”: “GSON”, “嫁”:真实的, “年龄”:32”工资 “:123,” hasCar “:真,” 儿童的 “:[” 塞尔坎”, “沃尔坎德米”, “aybars”]}” XXXXXX /波儿/的usermodel / JSON

* About to connect() to localhost port 8081 (#0)
*   Trying ::1...
* Connection refused
*   Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 8081 (#0)
> PUT /ponyo/UserModel/json HTTP/1.1
> User-Agent: curl/7.28.1
> Host: localhost:8081
> Accept: */*
> Content-Type: application/json
> Content-Length: 121
> 
* upload completely sent off: 121 out of 121 bytes
< HTTP/1.1 415 Unsupported Media Type
< Content-Type: text/html; charset=iso-8859-1
< Date: Wed, 09 Apr 2014 13:55:43 GMT
< Content-Length: 0
< 
* Connection #0 to host localhost left intact
* Closing connection #0

我加入的依赖关系的pom.xml如下解决它。 请您尝试一下。

    <dependency>
        <groupId>com.owlike</groupId>
        <artifactId>genson</artifactId>
        <version>0.98</version>
    </dependency>


Answer 6:

我得到了同样的问题。 事实上,要求没有达到球衣annoted方法。 我解决了这个问题,添加注释:@Consumes(MediaType.APPLICATION_FORM_URLENCODED)注释@Consumes(“/”)不工作!

    @Path("/"+PropertiesHabilitation.KEY_EstNouvelleGH)
    @POST
    //@Consumes("*/*")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public void  get__EstNouvelleGH( @Context HttpServletResponse response) {
        ...
    }


Answer 7:

不要返回字符串在你的方法,但客户对象,它的自我,让JAXB把德/序列化的关怀。



Answer 8:

我有同样的问题,因为它是给错误-415-不支持的媒体类型 ,而使用JSON,而我已经有击中后呼叫

@Consumes(MediaType.APPLICATION_JSON) 

和请求头在我的RESTful Web服务使用新泽西2.0+

Accept:application/json
Content-Type:application/json

我加入以下依存关系到我的项目解决了这个问题

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25</version>
</dependency>

这将增加以下jar文件到您的库:

  1. 新泽西媒体JSON - 杰克逊2.25.jar
  2. 球衣实体过滤-2.25.jar
  3. 杰克逊模块JAXB的注释 - 2.8.4.jar
  4. 杰克逊JAXRS JSON的提供商 - 2.8.4.jar
  5. 杰克逊 - JAXRS碱基2.8.4.jar

我希望它会为别人太多,因为它没有对我的作品。



Answer 9:

只是改变了内容类型为application / JSON当您使用JSON与POST / PUT,等等。



文章来源: Error 415 Unsupported Media Type: POST not reaching REST if JSON, but it does if XML