0

I want to make a request through Postman and accept it in the method below. An error pops up, as I understand it, due to the fact that I incorrectly process the date. Question: how can I send the date via postman and save it correctly in the database?

Log in IDEA and Postman:

   Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.time.LocalDate` from String "23/02/2020": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '23/02/2020' could not be parsed at index 0; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDate` from String "23/02/2020": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '23/02/2020' could not be parsed at index 0
 at [Source: (PushbackInputStream); line: 2, column: 20] (through reference chain: task.homerent.model.Contract["start_date"])]

Inquiry:

{
    "start_date" : "23/02/2020",
    "end_date" : "27/02/2020",
    "id_house" : 2,
    "id_tenant" : 2
}

Code:

@PostMapping("/rent")
    @PreAuthorize("hasAuthority('user:write')")
    public void homeRent(@RequestBody House house) {
        System.out.println("ID арендатора");
        System.out.println(house.getId_tenant());
        System.out.println("Начало аренды");
        int dates = Integer.valueOf(String.valueOf(house.getStart_date()));
        LocalDate date = new LocalDate(dates); - an error is displayed LocalDate(int, int, int) has private access in 'java.time.LocalDate'`
        System.out.println(date);
    }

Contract

@Data
@Entity
@Table(name = "contract", schema = "public")
public class Contract {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "id_house")
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    @JsonIgnore
    private House house;

    @ManyToOne
    @JoinColumn(name = "id_tenant")
    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @JsonIgnore
    private User user;

    @Column(name = "end_date")
    private LocalDate end_date;
    @Column(name = "start_date")
    private LocalDate start_date;
}
Blacit
  • 203
  • 3
  • 12
  • 1
    Does this answer your question? [Unable to convert String to Date by requestBody in spring](https://stackoverflow.com/questions/25646564/unable-to-convert-string-to-date-by-requestbody-in-spring) – Benjamin Schüller Oct 01 '20 at 07:15

2 Answers2

1

Enabling the dependency in pom.xml file:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>

Predefined formatters https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

The date format is ISO, yyyy-MM-dd

Using my request as an example:

{
    "start_date" : "2020-03-12",
    "end_date" : "2020-03-19",
    "id_house" : 2,
    "id_tenant" : 3
}
Blacit
  • 203
  • 3
  • 12
0

You'll need to use LocalDate.of(int,int,int) to construct a LocalDate instance

Steve H.
  • 6,912
  • 2
  • 30
  • 49