Java REST 服务返回 400

问题描述

基本上我想使用以下正文执行 POST 请求:

public class Input extends BaseInput {
    private static final long serialVersionUID = 1L;
    
    private String example;

    // Getter & Setter
}
public class BaseInput implements Serializable {
    private SomeBaseElement sbe;

    // Getter & Setter
}
public class SomeBaseElement implements Serializable {
    private static final long serialVersionUID = 1L;

    private String baseString;

    // Getter & Setter
}

基本上我知道 SomeBaseElement 是问题所在,因为如果我从 BaseInput删除它,请求就会成功。 但是有了它,我收到了 400 BAD REQUEST 错误

为什么会这样?

解决方法

由于您没有提供代码,所以事情就是这样。可能您正在接受 REST 服务 BaseInput 对象,但您正在发布一个 Input 对象,它是一个 400-Bad Request。您可以使用以下方法接受 Input 对象。

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/test")
public Response test(Input input) {
    return Response.ok().build();
}

如果您想在 REST 端接受 BaseInput,您可以使用工厂模式。我建议您结帐以下内容: Inheritance and REST API Controllers - Dealing with Subclasses