json 响应中缺少 ID,mongodb 中有 spring 数据

id missing in the json response with spring data in mongodb

我正在 mongo 数据库中使用 spring 数据保存一个对象。但是我看不到创建的 id return 和 json 响应对象。

@JsonInclude(JsonInclude.Include.ALWAYS)
@ApiModel(description = "Submission")
public class Submission {

    @Id
    private String submissionId;
    private String assignmentId;
    private String title;

}

public interface SubmissionRepository extends MongoRepository<Submission, String>{

}

下面是我在控制器中所做的,

Submission sub= submissionService.createSubmission(submission);
return new ResponseEntity<>(sub, HttpStatus.CREATED);

即使子对象也填充了 submissionId,但它不会作为 属性 随响应 json 对象一起提供。知道响应中只缺少 submissionId 的线索吗?

即使使用 get 请求,id 也不会随响应一起出现。我正在使用 spring 引导环境和 spring-data-mongodb-1.6.3

我通过如下创建配置 class 找到了解决方案,

@Configuration
public class RestDataConfig extends RepositoryRestMvcConfiguration{
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config)
    {
        super.configureRepositoryRestConfiguration(config);
        config.exposeIdsFor(Assignment.class);
    }
}

更新

所以 Harshana 适合 Spring Boot 1.3.0。您可以将每个 class 您希望在 config.exposeIdsFor(Assignment.class) 下公开的 id 扔掉。它现在也对我有用。所以我下面的回答只是一个替代方案。

此外,如果您希望 HAL JSON 到 JSON API(又名 Spring 引导后端和 Ember 数据前端)Ember-Data-Hal-9000 有Ember 数据 1.13.x .

效果很好

已接受的答案在 Spring Boot 中对我不起作用。相反,我创建了 id 的别名并使用了 Jackson 注释 @JsonProperty("id")

import org.springframework.data.annotation.Id;
import com.fasterxml.jackson.annotation.JsonProperty;

 public class Calculation {

    @Id private String id;

    private String equation;
    private String result;

    @JsonProperty ("id")
    private String emberId;


    public String getEmberId() {
        return id;
    }

(因为 Ember 数据需要一个并使用正则表达式将其从

中提取出来
_links: {
  self: {
    href: "http://localhost:4201/calculations/562796702b5e0940c66593fe"
   }
}

在 Ember 适配器中听起来不是很有趣)。希望这对以后的人有所帮助。

如果您想在客户端中使用 Ember 处理此问题,更新看起来像是有人整理了一个 hal serializer

您可以尝试在 Assignment.class

中加入 public getId()

在我的例子中,我创建了这样的配置 class:

import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;

@Configuration
public class MongoConfiguration implements RepositoryRestConfigurer
{
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config)
    {
        config.exposeIdsFor(Brand.class);
    }
}

有效