Spring MVC + Jackson:字段未被序列化

Man*_*anu 2 spring json spring-mvc jackson

我试图使用REST API进行简单的往返,导致将实体存储到数据库中,然后返回存储的实体.向下工作正常,实体存储并正确返回到REST控制器.但是,当我返回时,杰克逊似乎错误地序列化,因为"名称"属性不包括在内.

这是实体:

@Entity
@Configurable
public class MyEntity extends IdentifiableEntity {

    private String name;

    protected MyEntity() {
    };

    public MyEntity(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

和扩展实体:

@Configurable
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
public abstract class IdentifiableEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Version
    @Column(name = "version")
    private Integer version = 1;

    public String toString() {
        return ReflectionToStringBuilder.toString(this,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getVersion() {
        return this.version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }
}
Run Code Online (Sandbox Code Playgroud)

REST控制器是:

@RestController
@RequestMapping("/service")
public class Service {

    @RequestMapping(value = "/public/{name}", method = RequestMethod.GET)
    public MyEntity storeEntityPublic(@PathVariable String name) {
        System.out.println("Hello " + name
                + ", I am saving on the db. (PUBLIC)");
        MyEntity saved = controller.saveEntity(name);

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

那我的业务逻辑:

@Service
public class LogicController {
    @Autowired
    private MyEntityRepository myEntityRepository;

    public MyEntity saveEntity(String name) {
        MyEntity cg = new MyEntity(name);

        return myEntityRepository.save(cg);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Spring存储库:

@Repository
public interface MyEntityRepository extends JpaSpecificationExecutor<MyEntity>,
        JpaRepository<MyEntity, Long> {

}
Run Code Online (Sandbox Code Playgroud)

返回的JSON是:

{ "ID":12, "版本":1}

我的"名字"属性在哪里?是在REST控制器返回的变量中设置的.

Man*_*anu 6

我找到了诀窍:MyEntity需要公开获取必须显示的属性.使用DTO模式的一个很好的理由.