【问题标题】:Why does the received entity in my @RestController is setting value to null not to default为什么我的@RestController 中接收到的实体将值设置为 null 而不是默认值
【发布时间】:2018-01-11 15:03:12
【问题描述】:

我正在使用:

  • 弹簧数据休息
  • 龙目岛

当我在控制器中收到我的实体时

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
Long create(@RequestBody Blog blog) {
  blogService.insert(blog);
  return blog.getId();
}

我只设置了博客名称,但是Blog.java 包含默认值:

private Boolean isDisabled = false;
private Boolean canCreateTags = true;
private Boolean canCreateCategories = true;
private Boolean hasRss = false;

这是我的请求的请求正文:

{"organization":{"id":"1"},"description":"test"}

所有未发送的值似乎都是null

但是当我使用BlogDTO 而不是Blog 时:

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
Long create(@RequestBody BlogDTO blog) {
  blogService.insert(blog);
  return blog.getId();
}

所有值都设置为默认值。

  • 为什么没有使用我的默认值创建实例?
  • 为什么使用默认值创建 DTO 实例?

【问题讨论】:

  • 如果对您有帮助,请将答案标记为正确

标签: java spring spring-mvc spring-data spring-data-rest


【解决方案1】:

用默认值覆盖 Blog.java 的 toString 方法应该可以解决这个问题,如下所示

public class Blog {

private Boolean isDisabled = false;
private Boolean canCreateTags = true;
private Boolean canCreateCategories = true;
private Boolean hasRss = false;

    @Override
        public String toString() {
            return "Blog{" +
                    "isDisabled='" + isDisabled + '\'' +
                    ", canCreateTags='" + canCreateTags + '\'' +
                    ", canCreateCategories=" + canCreateCategories +
                    '}';
        }
    }

请将此问题和答案作为参考Spring 4 MVC - Rest service - use default values in beans

【讨论】:

    【解决方案2】:

    如果你想有默认值,你需要在发送到 post call body 时明确设置

    【讨论】:

    • 这并不完全正确,我已经添加了一个带有 DTO 对象的示例
    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2016-12-28
    • 2019-05-15
    相关资源
    最近更新 更多