为什么我的@RestController中的接收实体将值设置为null而不是默认值

时间:2018-01-11 06:52:44

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

我正在使用:

  • spring data rest
  • 龙目

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

@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;

这是我的请求的请求主体:

{ “组织”:{ “ID” 为 “1”}, “说明”: “测试”}

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

但是当我使用BlogDTO代替Blog

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

所有值都设置为默认值。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您想拥有默认值,则需要在发送到发布呼叫主体时明确设置