简体   繁体   中英

415 Unsupported media type error for DELETE Operation

@Path("v2/test”)
Class Test{

    @Path(“{id}/{version}”)
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getvalue(@PathParam(“id”)
        String id, @PathParam(“version”)
        String version) {
       //do some thing
    }
  @DELETE
  @Path(“{testPath: .+}")
  @Produces(MediaType.APPLICATION_JSON)
  public Response deleteValue(@PathParam("testPath")
      String testPath) throws Exception {
//do something  
}

}

GET: http://localhost:8080/v2/test/testId/1.0 - works

DELETE: http://localhost:8080/v2/test/testId - works

DELETE: http://localhost:8080/v2/test/testId/1.0 - 405 method not allowed error

When I add two Delete paths I get 415 error (the same curl works with no version)

@Path("v2/test”)
    Class Test{
        @Path(“{id}/{version}”)
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public Response getvalue(@PathParam(“id”)
            String id, @PathParam(“version”)
            String version) {
           //do some thing
        }
      @DELETE
      @Path(“{id}")
      @Produces(MediaType.APPLICATION_JSON)
      public Response deleteValue(@PathParam("id")
          String id) throws Exception {
    //do something  
    }
      @DELETE
      @Path(“{id}/{version}")
      @Produces(MediaType.APPLICATION_JSON)
      public Response deleteValue(@PathParam(“id”)
            String id, @PathParam(“version”)
            String version) throws Exception {
    //do something  
    }
    
    }

curl -X DELETE --header 'Content-Type: application/json' http://localhost:8080/v2/test/testId/1.0 - gives me error 'Error 415--Unsupported Media Type'

curl -X DELETE --header 'Content-Type: application/json' http://localhost:8080/v2/test/testId - works fine(even without contentType works fine)

But If I remove Get method DELETE Operation with id and version works

@Path("v2/test”)
Class Test{

  @DELETE
  @Path(“{testPath: .+}")
  @Produces(MediaType.APPLICATION_JSON)
  public Response deleteValue(@PathParam("testPath")
      String testPath) throws Exception {
//do something  }

}

DELETE: http://localhost:8080/v2/test/testId - works

DELETE: http://localhost:8080/v2/test/testId/1.0 - works

Could some one please help on how can I fix this? I want get and delete methods in above mentioned format how can I achieve this?

Jdk: 1.6 Jersey: 1.10 Server: weblogic

Create another DELETE-method with the same parameters as getValue :

@Path("v2/test”)
Class Test{

    @GET
    @Path(“{id}/{version}”)
    @Produces(MediaType.APPLICATION_JSON)
    public Response getValue(
        @PathParam(“id”) String id, @PathParam(“version”) String version
    ) {
       //do something
    }

    @DELETE
    @Path(“{id}/{version}”)
    @Produces(MediaType.APPLICATION_JSON)
    public Response deleteValue(
        @PathParam(“id”) String id, @PathParam(“version”) String version
    ) throws Exception {
       return this.deleteValue("/" + id + "/" + version);
    }

    @DELETE
    @Path(“{testPath: .+}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response deleteValue(
        @PathParam("testPath") String testPath
    ) throws Exception {
      //do something  
    }

}

I am not familiar with JAX-RS. But, I think the problem is from the regex you used, @Path("{testPath: .+}") while instead it should have been @Path("{testPath: .*}") . And @PathParam("testPath" has to be what goes in place of the star(*) in testPth: * , not testPath itself.

There are some characters in the code, i don't know if it was while pasting it here though.

@Path("/v2/test") // updated
Class Test{
  @DELETE
  @Path("/{testPath: .*}") //updated - try may be '.+' also
  @Produces(MediaType.APPLICATION_JSON)
  public Response deleteValue(@PathParam("testPath") String testPath) throws Exception { //updated
     //do something  
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM