gpt4 book ai didi

java - 在 Spring Boot 中接受阿拉伯日期作为查询参数

转载 作者:行者123 更新时间:2023-12-05 04:25:41 27 4
gpt4 key购买 nike

我想在查询参数中接受阿拉伯日期

例如:٢٠٢١-٠٧-٢٠ 这个日期的英文版本是 2021-07-20我找到了这个 soltion

DecimalStyle defaultDecimalStyle
= DateTimeFormatter.ISO_LOCAL_DATE.getDecimalStyle();
DateTimeFormatter arabicDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE
.withDecimalStyle(defaultDecimalStyle.withZeroDigit('\u0660'));

String encodedArabicDateStr = "%D9%A2%D9%A0%D9%A1%D9%A9-%D9%A0%D9%A4-%D9%A1%D9%A5";
String arabicDateStr
= URLDecoder.decode(encodedArabicDateStr, StandardCharsets.UTF_8);
LocalDate date = LocalDate.parse(arabicDateStr, arabicDateFormatter);
System.out.println("Parsed date: " + date);

它按预期工作

现在,在我的 Spring Boot 应用程序中,我使用带有模式的 @DateTimeFormat 处理 LocalDate

@DateTimeFormat(pattern = "yyyy-MM-dd") val fromDate: LocalDate

我如何告诉 Spring Boot 使用自定义方法来解析日期?最初的问题是当有人向应用程序发送阿拉伯日期时,它会因以下错误而崩溃:

org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'dateRange' on field 'fromDate': rejected value [٢٠٢١-٠٧-٢٠];
codes [typeMismatch.dateRange.fromDate,typeMismatch.fromDate,typeMismatch.java.time.LocalDate,typeMismatch];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dateRange.fromDate,fromDate];
arguments [];
default message [fromDate]];
default message [Failed to convert value of type 'java.lang.String[]' to required type 'java.time.LocalDate';
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '٢٠٢١-٠٧-٢٠'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [٢٠٢١-٠٧-٢٠]]

我试过:

  • 通过过滤器更新请求值,但它不起作用。
  • 像这样格式化转换服务 sample .

最佳答案

您可以为 LocalDate 创建自己的自定义反序列化器,它将包含格式字段。

LocalDate 创建自定义解串器

public class CustomDateDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {

DecimalStyle defaultDecimalStyle = DateTimeFormatter.ISO_LOCAL_DATE.getDecimalStyle();
DateTimeFormatter arabicDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE.withDecimalStyle(defaultDecimalStyle.withZeroDigit('\u0660'));

String arabicDateStr = URLDecoder.decode(jsonParser.getText(), StandardCharsets.UTF_8);
return LocalDate.parse(arabicDateStr, arabicDateFormatter);
}
}

LocalDate 使用自定义反序列化器

@JsonSerialize(using = CustomDateDeserializer.class)
private LocalDate fromDate;

关于java - 在 Spring Boot 中接受阿拉伯日期作为查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73180896/

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