java—如何将整数列表作为json数据传递给spring boot rest api?

zqry0prt  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(339)

如何传递customerID和帐户详细信息的数组并在控制器中接收它?
下面是控制器的温度。
控制器

@PostMapping("/createaccount")
public String createAccount(@RequestBody Customerids customerids,@RequestBody Account account)
    {
        return accountservices.createAccountService(customerids, account);
    }

只是想知道下面给出的json格式是否正确?
已传递json:

{
    "customerids" : {
        "customreids" : [15,16,17]
    },
    "account":{
    "type": "savings",
    "individual":"no",
    "balance": 3000.0

    }   

}

帐户:

package com.tracker.pojos;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name="Account")
public class Account {

    @Id
    private String account_number;

    @Column
    private String type;

    @Column
    private String individual;

    @Column
    private double balance;

    @OneToMany
    private List<Customer> customers;

}

客户ID:

package com.tracker.pojos;

import java.util.List;

import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Customerids {
    List<Integer> customerids;
}

抛出错误:2020-12-18 13:43:02.491 warn 10776---[nio-8080-exec-2].w.s.m.s.defaulthandlerexceptionresolver:已解析[org.springframework.http.converter.httpMessageToradableException:json解析错误:无法反序列化的示例 java.util.ArrayList<java.lang.Integer> 不启动对象令牌;嵌套异常为com.fasterxml.jackson.databind.exc.missmatchdinputException:无法反序列化的示例 java.util.ArrayList<java.lang.Integer> [source:(pushbackinputstream)处的启动对象令牌不足;行:2,列:21](通过引用链:com.tracker.pojos.customerids[“customerids”])]

qnzebej0

qnzebej01#

@RequestBody 注解读取整个请求体,在代码中您使用它两次来读取请求体的两个不同部分。你不能那样做。最好定义一个新的dto类,该类包含您需要在请求正文中接收的所有内容,然后您可以从该dto中读取您想要的所有内容,具体操作如下:

@Getter
@Setter
public class CreateAccountModel {

    private Integer[] customerIds;
    private Account account;
}

这就是你的终点:

@PostMapping("/createaccount")
public String createAccount(@RequestBody CreateAccountModel createAccountModel) {
    return accountservices.createAccountService(
            createAccountModel.getCustomerIds(),
            createAccountModel.getAccount());
}

然后您可以请求如下:

curl -i -H "Content-Type:application/json" -d '{"customerIds": [1,2,3], "account": {}}' http://localhost:8080/createaccount
qjp7pelc

qjp7pelc2#

pojo中的customerid需要一个对象,并且该对象绑定到一个数组。但是accounts类绑定到一个列表,该列表是一个数组。
更改此项:

"customerids" : {
    "customreids" : [15,16,17]
},

仅此而已:

"customerids" : [15,16,17],

改变这个:

@OneToMany
private List<Customer> customers;

对此:

@OneToMany
private List<Customer> customerIds;

相关问题