Spring boot SpringBoot/JHipster rest api配置,转换类型问题
当我试图以JsonFormat获取一个对象时,Jhipster版本4.2.2生成的SpringBoot rest api出现问题Spring boot SpringBoot/JHipster rest api配置,转换类型问题,spring-boot,jhipster,Spring Boot,Jhipster,当我试图以JsonFormat获取一个对象时,Jhipster版本4.2.2生成的SpringBoot rest api出现问题 Request URL http://localhost:3000/api/models Response Body [ { "id": 1, "name": "lenet", "lossWeights": null, "loss": "categorical_
Request URL
http://localhost:3000/api/models
Response Body
[
{
"id": 1,
"name": "lenet",
"lossWeights": null,
"loss": "categorical_crossentropy",
"sampleWeightMode": null,
"isInput": false,
"isOutput": false,
"optimizer": {
"id": 1,
"optimizerType": {
"id": 5,
"name": "SGD"
}
},
"coordinates": {
"id": 1,
"xpos": 0,
"ypos": 0
},
"containedModels": [],
"succeededByModels": [],
"succeededByLayers": [],
"containedLayers": [
{
"id": 1,
"name": "input",
"isInput": true,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 2,
"xpos": 78.376953125,
"ypos": 108.01763916015625
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 43,
"name": "InputLayer"
}
},
{
"id": 2,
"name": "conv2d_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 3,
"xpos": 341.5582275390625,
"ypos": 102.59124755859375
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 63,
"name": "Conv2D"
}
},
{
"id": 3,
"name": "activation_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 4,
"xpos": 623.73193359375,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 15,
"name": "Activation"
}
},
{
"id": 4,
"name": "max_pooling2d_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 5,
"xpos": 941.17724609375,
"ypos": 102.59124755859375
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 70,
"name": "MaxPooling2D"
}
},
{
"id": 5,
"name": "conv2d_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 6,
"xpos": 1253.1962890625,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 63,
"name": "Conv2D"
}
},
{
"id": 6,
"name": "max_pooling2d_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 7,
"xpos": 1540.2081298828125,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 70,
"name": "MaxPooling2D"
}
},
{
"id": 7,
"name": "activation_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 8,
"xpos": 1861.44921875,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 15,
"name": "Activation"
}
},
{
"id": 8,
"name": "flatten_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 9,
"xpos": 2151.32373046875,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 54,
"name": "Flatten"
}
},
{
"id": 9,
"name": "dense_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 10,
"xpos": 2505.89208984375,
"ypos": 98.57888793945312
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 6,
"name": "Dense"
}
},
{
"id": 10,
"name": "dropout_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 11,
"xpos": 2828.763671875,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 44,
"name": "Dropout"
}
},
{
"id": 11,
"name": "dense_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 12,
"xpos": 3121.79052734375,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 6,
"name": "Dense"
}
},
{
"id": 12,
"name": "dropout_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 13,
"xpos": 3452.8017578125,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 44,
"name": "Dropout"
}
},
{
"id": 13,
"name": "dense_3",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 14,
"xpos": 3784.675048828125,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 6,
"name": "Dense"
}
}
],
"modelConfiguration": {
"id": 1,
"name": "Modèle LeNet5",
"creationDate": "2017-05-11T00:00:00+02:00",
"saveURI": "./tests/scripts/sequential/models/model.json",
"project": {
"id": 1,
"name": "LeNet5",
"creationDate": "2017-10-22T00:00:00+02:00",
"updateDate": "2017-10-23T00:00:00+02:00"
}
}
}
]
就像你在上面看到的,这是我的模型。由于字段CONTANDLAYERS,您可以访问其中的图层列表,并且每个图层都有一个字段SUCEEDBYLAYERS,在这种情况下该字段不应为空(对于id 2)
这里的字段不是空的。我应该如何配置api以避免得到空字段。我还希望只得到一个层id数组,而不是实际的下一层。
我不知道我是否清楚,这是我的第一篇帖子。请不要犹豫,询问我更多信息。你在JPA中被偷懒的关系抓住了。默认情况下,JHipster中的所有关系都是延迟加载的,这意味着除非您访问相关实体,否则不会获取它们。这就是为什么值是空的,除非您在使Hibernate获取相关对象的
System.out.println
调用中访问它们
要解决这个问题,您应该修改存储库并使用
@EntityGraph
,查看Spring数据JPA文档:您被JPA中的延迟加载关系捕获了。默认情况下,JHipster中的所有关系都是延迟加载的,这意味着除非您访问相关实体,否则不会获取它们。这就是为什么值是空的,除非您在使Hibernate获取相关对象的System.out.println
调用中访问它们
为了解决这个问题,您应该修改您的存储库并使用
@EntityGraph
,看看Spring数据JPA文档:我真的怀疑您是否使用了这么旧的JHipster版本:1.8.5,当前版本是4.10.2是的,我犯了一个错误,我认为yo JHipster版本会给我它给我的版本,我的yoman版本。我的版本实际上是4.2.2我真的怀疑你是否使用了这么旧的JHipster版本:1.8.5,当前版本是4.10.2是的,我犯了一个错误,我认为yo JHipster版本会给我它给我的版本,我的yoman版本。我的版本实际上是4.2.2
@GetMapping("/models/{id}")
@Timed
public ResponseEntity<Model> getModel(@PathVariable Long id) {
log.debug("REST request to get Model : {}", id);
Model model = modelRepository.findOneWithEagerRelationships(id);
System.out.println("======================================================");
// Layer layer = (Layer)model.getContainedLayers().toArray()[0];
// System.out.println(((Layer)layer.getSucceededByLayers().toArray()[0]).getSucceededByLayers());
System.out.println("=====================================================");
return ResponseUtil.wrapOrNotFound(Optional.ofNullable(model));
}
{
"id": 1,
"name": "lenet",
"lossWeights": null,
"loss": "categorical_crossentropy",
"sampleWeightMode": null,
"isInput": false,
"isOutput": false,
"optimizer": {
"id": 1,
"optimizerType": {
"id": 5,
"name": "SGD"
}
},
"coordinates": {
"id": 1,
"xpos": 0,
"ypos": 0
},
"containedModels": [],
"succeededByModels": [],
"succeededByLayers": [],
"containedLayers": [
{
"id": 1,
"name": "input",
"isInput": true,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 2,
"xpos": 78.376953125,
"ypos": 108.01763916015625
},
"succeededByLayers": [
{
"id": 2,
"name": "conv2d_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 3,
"xpos": 341.5582275390625,
"ypos": 102.59124755859375
},
"succeededByLayers": [
{
"id": 3,
"name": "activation_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 4,
"xpos": 623.73193359375,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 15,
"name": "Activation"
}
}
],
"succeededByModels": null,
"layerType": {
"id": 63,
"name": "Conv2D"
}
}
],
"succeededByModels": null,
"layerType": {
"id": 43,
"name": "InputLayer"
}
},
{
"id": 2,
"name": "conv2d_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 3,
"xpos": 341.5582275390625,
"ypos": 102.59124755859375
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 63,
"name": "Conv2D"
}
},
{
"id": 3,
"name": "activation_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 4,
"xpos": 623.73193359375,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 15,
"name": "Activation"
}
},
{
"id": 4,
"name": "max_pooling2d_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 5,
"xpos": 941.17724609375,
"ypos": 102.59124755859375
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 70,
"name": "MaxPooling2D"
}
},
{
"id": 5,
"name": "conv2d_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 6,
"xpos": 1253.1962890625,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 63,
"name": "Conv2D"
}
},
{
"id": 6,
"name": "max_pooling2d_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 7,
"xpos": 1540.2081298828125,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 70,
"name": "MaxPooling2D"
}
},
{
"id": 7,
"name": "activation_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 8,
"xpos": 1861.44921875,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 15,
"name": "Activation"
}
},
{
"id": 8,
"name": "flatten_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 9,
"xpos": 2151.32373046875,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 54,
"name": "Flatten"
}
},
{
"id": 9,
"name": "dense_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 10,
"xpos": 2505.89208984375,
"ypos": 98.57888793945312
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 6,
"name": "Dense"
}
},
{
"id": 10,
"name": "dropout_1",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 11,
"xpos": 2828.763671875,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 44,
"name": "Dropout"
}
},
{
"id": 11,
"name": "dense_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 12,
"xpos": 3121.79052734375,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 6,
"name": "Dense"
}
},
{
"id": 12,
"name": "dropout_2",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 13,
"xpos": 3452.8017578125,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 44,
"name": "Dropout"
}
},
{
"id": 13,
"name": "dense_3",
"isInput": false,
"isOutput": false,
"isIntermediate": false,
"coordinates": {
"id": 14,
"xpos": 3784.675048828125,
"ypos": 99.8780517578125
},
"succeededByLayers": null,
"succeededByModels": null,
"layerType": {
"id": 6,
"name": "Dense"
}
}
],
"modelConfiguration": {
"id": 1,
"name": "Modèle LeNet5",
"creationDate": "2017-05-11T00:00:00+02:00",
"saveURI": "./tests/scripts/sequential/models/model.json",
"project": {
"id": 1,
"name": "LeNet5",
"creationDate": "2017-10-22T00:00:00+02:00",
"updateDate": "2017-10-23T00:00:00+02:00"
}
}
}