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);
}
}
有效
我正在 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
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);
}
}
有效