javaspring-boothibernatedatelocaldatetime

Parameter value [2019-05-15,23:00] did not match expected type [java.time.LocalDateTime (n/a)]


firstly I'm a beginner in Java. I want to ask you, I try to GET request, and I catch an exception.

GET http://localhost:8080/api/criteria/byParam?name=dateTimeAppointment&value=2019-05-15,23:00

java.lang.IllegalArgumentException: Parameter value [2019-05-15,23:00] did not match expected type [java.time.LocalDateTime (n/a)]

what's wrong?

@JsonFormat(pattern="yyyy-MM-dd,HH:mm")
    @Column(name = "local_date_time", columnDefinition = "TIMESTAMP")
    private LocalDateTime dateTimeAppointment;

Controller

@RestController
@AllArgsConstructor
@RequestMapping("/api/criteria")
public class ClientController {
    CriteriaService criteriaService;

    @GetMapping("/byParam")
    public List<Client> getClientsByParam(@RequestParam(value = "name") String name, @RequestParam(value = "value")
            String value) {
        return criteriaService.getClientByParam(name, value);
    }

CriteriaService

public class CriteriaService {
    @PersistenceContext
    EntityManager entityManager;
    public List<Client> getClientByParam(String name, String value) {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Client> criteriaQuery = criteriaBuilder.createQuery(Client.class);
        Root<Client> root = criteriaQuery.from(Client.class);
        Predicate predicate = criteriaBuilder.equal(root.get(name), value);

        criteriaQuery.where(predicate);

        return entityManager.createQuery(criteriaQuery).getResultList();
    }

Please, help me how fix it.


Solution

  • Try something like this:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd,HH:mm");
    Predicate predicate = criteriaBuilder.equal(root.get(name),LocalDateTime.parse(value , formatter));