Как передать List <CustomObject>методом post, используя Spring? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть следующий JSON,

{
   "numberBlockList":[
      "{ 'date' : '2019-07-11T10:28:09.461Z', 'numberCombination' : '10-24-28-36-38-51', 'pickType' : 'RANDOM', 'cost' : '7.00'}",
      "{ 'date' : '2019-07-11T10:28:09.471Z', 'numberCombination' : '4-7-15-27-28-40', 'pickType' : 'RANDOM', 'cost' : '7.00'}"
   ]
}

Мой контроллер -

@RequestMapping(value = "/saveNumberBlock", method = RequestMethod.POST, consumes = "application/json")
    @ResponseBody
    public String saveData(Model model, @RequestBody NumberBlockData numberBlockData) {
        indexData(model);
        log.info("getNumberCombination : " + numberBlockData.getNumberBlockList());

        return "index";
    }

Блок моего номера

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor

@Entity
@Table(name = "number_block")
public class NumberBlock {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "date", nullable = false)
    private Date date;

    @Column(name = "number_combination", nullable = false)
    private String numberCombination;

    @Column(name = "pick_type", nullable = false)
    private String pickType;

    @Column(name = "cost", nullable = false, precision = 12, scale = 2)
    private BigDecimal cost;
}

Блок моего номера POJO

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class NumberBlockData {
    List<NumberBlock> numberBlockList;
}

в соответствии с примерами в интернете @ RequestBody NumberBlockData numberBlockData получит значения правильно, но моя ошибка возвращает следующую ошибку,

2019-07-11 16:13:47.648  WARN 8340 --- [nio-9696-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.arbiter.numberblock.modal.NumberBlock` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{ 'date' : '2019-07-11T10:43:47.560Z', 'numberCombination' : '3-14-22-35-45-52', 'pickType' : 'RANDOM', 'cost' : '3.50'}'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.arbiter.numberblock.modal.NumberBlock` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{ 'date' : '2019-07-11T10:43:47.560Z', 'numberCombination' : '3-14-22-35-45-52', 'pickType' : 'RANDOM', 'cost' : '3.50'}')
 at [Source: (PushbackInputStream); line: 1, column: 21] (through reference chain: com.arbiter.numberblock.modal.NumberBlockData["numberBlockList"]->java.util.ArrayList[0])]

Мне нужно получить NumberBlock Arraylist для сохранения в базе данных.Есть предложения?

Ответы [ 2 ]

1 голос
/ 11 июля 2019
{
    "numberBlockList":[
         { "date": "2019-07-11T10:28:09.461Z", "numberCombination": "10-24-28-36-38-51", "pickType": "RANDOM", "cost" : 7.00},
         { "date": "2019-07-11T10:28:09.471Z", "numberCombination" : "4-7-15-27-28-40", "pickType": "RANDOM", "cost": 7.00}
     ]
}
0 голосов
/ 11 июля 2019

Ваш JSON содержит содержимое numberBlockList, например:

  "{ 'date' : '2019-07-11T10:28:09.461Z', 'numberCombination' : '10-24-28-36-38-51', 'pickType' : 'RANDOM', 'cost' : '7.00'}",

Обратите внимание, что эта строка начинается и заканчивается "кавычками - т. Е. Это одна строка, а не набор значений json. Вот почему вы получаете исключение - Spring пытается использовать эту строку для построения NumberBlock.

Так что самое простое решение - удалить эти кавычки и просто иметь:

  { 'date' : '2019-07-11T10:28:09.461Z', 'numberCombination' : '10-24-28-36-38-51', 'pickType' : 'RANDOM', 'cost' : '7.00'},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...