'How to pass local date in path variable in Spring Boot?

I'm writing REST service.

I want to get all records by date that I pass in @Path variable.

How Can I do that?

What I tried to do:

Model Class:

@Entity
@Table(name = "test")
public class Test {
@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String name;


    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    private LocalDate beginDate;


    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    private LocalDate endDate;


    private String activity;
}

Repository:

@Repository
public interface TestRepository  extends JpaRepository<Test, Integer> {

    List<Test> findAllByName(String name);

    List<Test> findAllByBeginDate(LocalDate date);
}

Service:

@Service
public class TestService {

@Autowired
private final TestRepository testRepository;

public TestService(TestRepository testRepository) {
    this.testRepository = testRepository;
}

public List<Test> getAllTestsByBeginDate(LocalDate date) {
    return  testRepository.findAllByBeginDate(date);
   }
 }  

Controller:

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

    @GetMapping("test/all/{date}")
    public List<Test> getAllTestsByBeginDate(@PathVariable ("date") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {


    return testService.getAllTestsByBeginDate(date);
    }
  }

When I pass date like this, I get errors:

Postman Get Method



Solution 1:[1]

This should work

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

    @GetMapping("test/all/{date}")
    public List<Test> getAllTestsByBeginDate(@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {


    return testService.getAllTestsByBeginDate(date);
    }
  }

or this link will help

Solution 2:[2]

You can global configure any datetime format in application properties. Like:

spring.mvc.format.date=yyyy-MM-dd

spring.mvc.format.date-time=yyyy-MM-dd HH:mm:ss

spring.mvc.format.time=HH:mm:ss

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Margi212