【问题标题】:JSON parsing unexpectedly passing when sending POST to REST service将 POST 发送到 REST 服务时意外通过 JSON 解析
【发布时间】:2017-10-29 00:15:23
【问题描述】:

我已经使用 Spring-Boot 构建了一个 REST 服务。一切正常。但是,当我将 curl 命令更新为 POST POJO 变量的错误名称时,我得到了一个具有默认值的对象。

我的实体看起来像:

@Entity
public class UserTask {

    @Id
    private Long userId;
    private int numComplete;
    private int numIncomplete;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public int getNumComplete() {
        return numComplete;
    }

    public void setNumComplete(int numComplete) {
        this.numComplete = numComplete;
    }

    public int getNumIncomplete() {
        return numIncomplete;
    }

    public void setNumIncomplete(int numIncomplete) {
        this.numIncomplete = numIncomplete;
    }

    @Override
    public String toString() {
        return new StringBuilder("[id : ").append(getUserId())
                .append(", complete : ").append(getNumComplete())
                .append(", incomplete : ").append(getNumIncomplete())
                .append("]").toString();
    }

}

我像这样对我的服务执行 POST:

curl -i -X POST -H "Content-Type:application/json" -d "{ \"uId\" : \"1\", \"numC\" : \"3\", \"numI\" : \"2\" }" http://localhost:8080/user-task

POST 的返回状态为201,记录已写入(在本例中为更新)数据库中。当我调试时,我看到传递给 REST 控制器方法的 UserTask 实例具有默认值 null 用于 userId0 用于 numComplete0 用于 numIncomplete。我认为当 JSON 解析器无法将 POST JSON 内容解组为 UserTask 实例时,它会失败?

【问题讨论】:

    标签: json rest jpa spring-boot


    【解决方案1】:

    您可以使用 JSONSchema 来验证 Hibernate Validator 的 @RequestBody 或 @Valid,因此如果 POJO 不满足此验证,您可以抛出RequiredParameters 异常。

    yourMethod(@RequestBody @Valid UserTask)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多