创建Post方法以保存具有倍数id的对象

时间:2018-01-21 02:57:52

标签: java spring

我在我的控制器中:

@RestController
public class OneTwoController {
    private OnTwoService _service;
//... more code
@PostMapping("/api/one-two")
@CrossOrigin
public ResponseEntity<ServiceResponse> save(@RequestBody OneTwo model) {
    return ResponseEntity.ok().body( _service.Save(model));
}

在我的实体中:

@Entity(name = "OneTwo")
@Where (clause = "deleted='false'")
public class OneTwo{
    @EmbeddedId
    private OneTwoKey_id;

    public OneTwo(OneTwoKey id) {
        this._id = id;
}

@JsonProperty("oneTwo")
    public void setId(OneTwoKey value) {
        this._id = value;
}

OneTwoKey课程:

public class OneTwoKey implements Serializable {
    @Column(name = "OneID")
    private int _oneID;

    @Column(name = "TwoID")
    private int _twoID;

    public OneTwoKey(int oneID, int twoID) {
        this._oneID = oneID;
        this._twoID = twoID;
    }

}  

我发送给Rest API的json:

{
  "oneTwo": {
    "oneID": 83,
    "twoID": 69
  },
  "deleted": true
}

问题是两个ID都为空,因此服务无法在数据库上执行插入操作。

当ID不止一个时,如何处理这些情况?

3 个答案:

答案 0 :(得分:1)

您可以做的不是使用

public ResponseEntity<ServiceResponse> save(@RequestBody OneTwo model) {

你可以使用

public ResponseEntity<ServiceResponse> save(@RequestBody String model) {

现在将String转换为json并获取所有键值对,如果您拥有动态数量的变量并且想要全部捕获它们会更容易。

或者您可以使用像jsonschema2pojo这样的工具来获取json架构并生成一个pojo。在json架构中,如果设置 "additionalProperties": true 你可以捕获所有的价值。

答案 1 :(得分:1)

尝试在... <img src={require('../images/Image4.jpg')}/> ... 类中添加setter,以便更轻松地使用JSON反序列化器:

...
var imgName = "Image4";
...
...
<img src={require('../images/' + imgName + '.jpg')}/>
...

另一种解决方案是创建DTO,使用它来接收控制器中的数据,然后将其转换为您的实体:

OneTwoKey

答案 2 :(得分:0)

您能否确定问题不是因为区分大小写?

小写列名称。您也可以对这些变量使用公共访问吗?这些是我最初的猜测,为什么有效载荷没有被正确绑定。

public class OneTwoKey implements Serializable {
    @Column(name = "oneID")
    public int _oneID;

    @Column(name = "twoID")
    public int _twoID;