Выполнить запрос cURL правильно - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть 2 сущности, представленные ниже:

@Entity
public class Product {


    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    @Column(name = "product_id")
    private String id;


    @Column
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Timestamp timestamp;

    @OneToOne(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    private Stock stock;
}


@Entity
public class Stock {


    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    @Column(name = "stock_id")
    private String id;


    @Column
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Timestamp timestamp;

    @Column
    private int quantity;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "product_id")
    private Product product;
}

Я собираюсь вставить объект продукта в базу данных, поэтому, если позже я использую команду GET, я смогу получитьJSON аналогично:

{
   "productId": “string", // id of the requested product, e.g. "vegetable-123" 
  "requestTimestamp": “dateTime", // datetime in UTC when requested the stock 

  "stock": {

     "id": "string", 
     "timestamp": 
     "dateTime" "quantity": "integer"

   } 
}

API для вызова POST представлен ниже:

@RestController
@RequestMapping("/api/v1/products")
public class ProductAPI {

    @Autowired
    private ProductService service;

    @PostMapping(value = "/createProduct", consumes = "application/json", produces = "application/json")
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {

        service.save(product);
        return ResponseEntity.status(HttpStatus.CREATED).body(product);
    }
}

Предоставлен запрос cURL,

$ curl -i -X POST -H "Content-Type:application/json" -d "{\"id\" : \"Product ID\",\"timestamp\" : \"2017-07-16 22:54:01.754\",\"id\": \"Stock ID\", \"timestamp\":\"2000-07-16 22:54:01.754\", \"quantity\": \"250\"}" http://localhost:8080/api/v1/products/createProduct

Команда выполнена успешно и выдает результат,

HTTP/1.1 201 
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 15 Feb 2019 09:10:59 GMT

{"timestamp":"2000-07-16 22:54:01.754"}

Однако записи базы данных неверны,

enter image description here enter image description here

Как правильно написать запрос cURL POST?

С помощью команды CURL я хотел бызаполните таблицы данными, и ответ должен вернуть то же самое,

{"productId": "Идентификатор продукта" "requestTimestamp": "2017-07-16 22: 54: 01.754"

"сток": {

 "id": "Stock ID", 
 "timestamp": "2000-07-16 22:54:01.754",
 "quantity": "250"

}}

1 Ответ

0 голосов
/ 15 февраля 2019

Похоже, что поле Timestamp не десериализовано, необходимо пометить поле Timestamp с помощью @JsonFormat, например:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")

Ниже приведен пример:

public static void main(String[] args)  throws Exception { 
    String s = "{\"timestamp\":\"2000-07-16 22:54:01.754\"}";
    ObjectMapper objectMapper = new ObjectMapper();
    Product product = objectMapper.readValue(s, Product.class);
    System.out.println(product.getTimestamp());
}

class Product {

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Timestamp timestamp;

    public Timestamp getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Timestamp timestamp) {
        this.timestamp = timestamp;
    }
}

Здесь - документация.

обновление

Для Stock вам необходимо передать егокак вложенный объект, чтобы придерживаться Product структуры класса, например:

{
  "id": "Product ID",
  "timestamp": "2017-07-16 22:54:01.754",
  "stock" : {
  "id": "Stock ID",
  "timestamp": "2000-07-16 22:54:01.754",
  "quantity": "250"
  }
}

Ваша команда curl будет:

$ curl -i -X POST -H "Content-Type:application/json" -d "{  \"id\": \"Product ID\", 
\"timestamp\": \"2017-07-16 22:54:01.754\",  \"stock\" : {  \"id\": \"Stock ID\",  
\"timestamp\": \"2000-07-16 22:54:01.754\",  \"quantity\": \"250\"  }}" 
http://localhost:8080/api/v1/products/createProduct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...