gpt4 book ai didi

java - Spring Boot 按日期搜索数据(格式为 ZonedDateTime)

转载 作者:行者123 更新时间:2023-11-30 05:55:04 24 4
gpt4 key购买 nike

我想获取在特定日期提交的表单列表。日期将由管理员在搜索框中传递(从前端它将是字符串,但在后端它将是 ZonedDateTime)。

我在存储库中编写的方法为:

List<AdmissionForm> findByDateContains(ZonedDateTime datePart);

方法形成引用:https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-creating-database-queries-from-method-names/

我的服务类后台逻辑如下:

@Transactional(readOnly = true)
public List<AdmissionFormDTO> findByDate(ZonedDateTime datepart){
return admissionFormRepository.findByDateContains(datepart).stream()
.map(admissionFormMapper::toDto)
.collect(Collectors.toList());
}

我的资源端点如下:

@GetMapping("/admissionForms/date")
@Timed
public List<AdmissionFormDTO> findByDate(@RequestParam("date") String date){
log.debug("REST request to get AdmissionForms by searchTerm :" + date);
//String to ZonedDateTime method conversion from seperate class
ZonedDateTime zDate = SupportUtils.convertStringDateToZoneDateTime(date);
return admissionFormService.findByDate(zDate);
}

我尝试过使用字符串搜索词,它工作正常,但在使用日期搜索时遇到了问题。

我遇到了这样的异常:

java.lang.IllegalArgumentException: Parameter value [%2018-11-20T00:00Z%] did not match expected type [java.time.ZonedDateTime (n/a)]' and exception = 'Parameter value [%2018-11-20T00:00Z%] did not match expected type [java.time.ZonedDateTime (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [%2018-11-20T00:00Z%] did not match expected type [java.time.ZonedDateTime (n/a)]'

进行一些更正,以便我可以按预期按日期进行搜索。

已编辑:我将数据类型从 ZoneDateTime 更改为 LocalDate 并相应地解决如下(暂时跳过计时):

我的存储库代码:

List<AdmissionForm> findByDate(LocalDate datePart);

我的服务等级:

@Transactional(readOnly = true)
public List<AdmissionFormDTO> findByDate(String datepart){
LocalDate localDatePart = SupportUtils.convertStringDateToLocalDate(datepart);
return admissionFormRepository.findByDate(localDatePart).stream()
.map(admissionFormMapper::toDto)
.collect(Collectors.toList());
}

我的资源入口点:

@GetMapping("/admissionForms/date")
@Timed
public List<AdmissionFormDTO> findByDate(@RequestParam("date")String date){
log.debug("REST request to get AdmissionForms by searchTerm :{}",date);
return admissionFormService.findByDate(date);
}

感谢您的建议,但找不到使用 ZondDateTime 的方法,因此我们稍微更改了要求。希望其他人能从这里的问题和建议答案中获得帮助。

最佳答案

使用DateTimeFormat默认情况下处理 ISO yyyy-MM-dd'T'HH:mm:ss.SSSZ 日期时间格式的注释:

public List<AdmissionFormDTO> findByDate(
@RequestParam("date") @DateTimeFormat ZonedDateTime date) {
return admissionFormService.findByDate(date);
}

如果您的日期不包含示例中的秒字段,您应该进一步自定义 @DateTimeFormat

关于java - Spring Boot 按日期搜索数据(格式为 ZonedDateTime),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com