不支持的媒体类型 - HTTP状态码415

4
我有一个关于Web服务的问题。 GET请求可以成功执行,但是POST请求会获得HTTP状态415。
我正在开发一个JAX-RS RESTful API项目,需要与Android移动应用程序进行通信。 我能够从GET语句中接收信息。
这是我的LoginFormat对象的代码:
@XmlRootElement
public class LoginFormat {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

这里是我 CoCreationService 类的 POST 示例:

@Path("/User")
public class CoCreationService {
    @POST
    @Path("/testLogin") 
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Response parseTerm(LoginFormat login) {  

        return Response.status(200).entity(login.getUsername() + login.getPassword()).build();  
    }
}

我尽力了,但还是感到困惑。

我正在使用curl测试Web服务:

curl -i -X POST -H 'Content-Type: application/json' -d '{"username": "testuser", "password": "test"}' http://localhost:8080/CoCreationService/api/User/testLogin

是否需要设置或者我犯了一个关键性错误?

PS:我在使用NetBeans。

编辑:使用text/plain的POST方法可以解决问题!

@POST
@Path("/testPost")
@Consumes("text/plain")
public Response postClichedMessage(String message) {       
    return Response.status(200).entity(message).build();
}

<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>${jersey.version}</version> </dependency> - ROMANIA_engineer
1个回答

0

代码没有问题。唯一需要做的就是在类路径中包含适当的库,该库知道如何取消编组JSON字符串。如果使用Maven,您可以简单地添加另一个依赖项:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>${jersey.version}</version>
</dependency>

只要您使用Netbeans,您就可以在AS日志中看到类似以下内容的信息:
SEVERE: A message body reader for Java class LoginFormat, and 
Java type class LoginFormat, and MIME media type application/json 
was not found.

The registered message body readers compatible with the MIME media type are:

我认为我做得没问题,但还是出现了错误。curl请求,是对的吗? - Matthias De Schoenmacker
我尝试了curl请求并且它是正确的。你确定必要的库在你的类路径中吗?也许清理并重新构建项目会有所帮助。 - Michal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接