@RestController 自动序列化 POJO

bai*_*win 1 java rest spring spring-boot

我有一个 Spring mvc 应用程序,@RestController类似于:

@RestController
@RequestMapping("levels")
public class LevelController {

  private final GetLevelOneCount getLevelOneCount;

  private final GetLevelTwoCount getLevelTwoCount;

  private final GetLevelThreeCount getLevelThreeCount;

  @Inject
  public LevelController(GetLevelOneCount getLevelOneCount, 
      GetLevelTwoCount getLevelTwoCount,
      GetLevelThreeCount getLevelThreeCount) {
    this.getLevelOneCount = getLevelOneCount;
    this.getLevelTwoCount = getLevelTwoCount;
    this.getLevelThreeCount = getLevelThreeCount;
  }


  @GetMapping("/level1/{id}")
  public LevelModel levelOne(@PathVariable String id) throws SQLException {
    LevelModel levelOneModel = new LevelModel();

    levelOneModel.setLevelQuery(getLevelOneCount.execute(id));
    levelOneModel.setLevelDirQuery(getLevelOneCount.executeDir(id));
    levelOneModel.setLevelDateQuery(getLevelOneCount.executeDate(id));

    return levelOneModel; 
}
Run Code Online (Sandbox Code Playgroud)

LevelModel是一个带有私有变量的 POJO,现在我想知道,这是否可以序列化为带有私有变量的 propper JSON?

package com.pwc.tag.service.levels;

public class LevelModel {

    private Long LevelQuery;

    private Long LevelDirQuery;

    private Long LevelDateQuery;

    public Long getLevelQuery() {
        return LevelQuery;
    }

    public void setLevelQuery(Long levelQuery) {
        LevelQuery = levelQuery;
    }

    public Long getLevelDirQuery() {
        return LevelDirQuery;
    }

    public void setLevelDirQuery(Long levelDirQuery) {
        LevelDirQuery = levelDirQuery;
    }

    public Long getLevelDateQuery() {
        return LevelDateQuery;
    }

    public void setLevelDateQuery(Long levelDateQuery) {
        LevelDateQuery = levelDateQuery;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*hyk 5

是的,由于getter 和 setter,您的对象将被序列化为适当的 JSON 结构,包括私有字段。

如果这些字段不应出现在输出对象中,您可以添加@JsonIgnore注释以将它们从 JSON 结构中排除。

PS常见的方法是用小写字母开头java属性的名称。