开发者社区> 问答> 正文

运行时JAVA上日期时间的字符串

我的请求POJO中有一个“生日”属性,它是String。在我的回复POJO中,出生日期属性是joda的DateTime。我通过使用“新的DateTime(requestModel.getDateOfBirth())”将其转换为DateTime。不过,它仅接受日期格式(在String中)为“ yyyy-mm-dd”。当我更改请求日期格式时,它会抛出“ 500

块引用

“。这是我的POJO:

RequestModel.java

public class RequestModel {
@NotNull(message = "dateOfBirth cannot be null")
private String dateOfBirth;

public RequestModel(String dateOfBirth) {
    super();
    this.dateOfBirth = dateOfBirth;
}
public String getDateOfBirth() {
    return dateOfBirth;
}

ResponseModel.java

public class ResponseModel {
private DateTime dateOfBirth;
public ResponseModel( DateTime dateOfBirth) {
    super();
    this.dateOfBirth = dateOfBirth;
}
public DateTime getDateOfBirth() {
    return dateOfBirth;
}
}

MyController.java

@PostMapping(consumes = {
                            MediaType.APPLICATION_JSON_VALUE,
                            MediaType.APPLICATION_XML_VALUE
                        },
             produces = {
                        MediaType.APPLICATION_JSON_VALUE,
                        MediaType.APPLICATION_XML_VALUE
                        })
public ResponseEntity<ResponseModel> create(@Valid @RequestBody RequestModel requestModel) {
    ResponseModel response = new ResponseModel(new DateTime(requestModel.getDateOfBirth()));
    return new ResponseEntity<ResponseModel>(response, HttpStatus.CREATED);
}

这是发布JSON请求,效果很好:

{
"dateOfBirth" : "2012-12-12"
}

以下请求正文引发错误:

{
"dateOfBirth" : "12-12-2012",
}

错误是:

{
"timestamp": "2020-03-14T19:09:51.647+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Invalid format: \"12-12-2012\" is malformed at \"12\"",
"path": "/myPath/"
}

我想知道如何改善控制器逻辑或设计以接受API中的任何Date格式?感谢您的帮助

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 21:19:28 457 0
1 条回答
写回答
取消 提交回答
  • 首先,因为你得到的日期没有一天的时间,你应该更喜欢乔达时间的LocalDate过度DateTime。

    其次,构造函数接受的格式(也包括LocalDate构造函数)是国际标准ISO 8601。我应该说,建议您的客户在他们的请求中使用此格式会很不错。

    但是,如果您坚持要使用:使用格式化程序将请求中的字符串解析为LocalDate。

    DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("dd-MM-yyyy");
    
        String requestDateOfBirth = "12-12-2012";
        LocalDate dateOfBirth = LocalDate.parse(requestDateOfBirth, dateFormatter);
    
        System.out.println("Date of birth: " + dateOfBirth);
    

    该代码段的输出为:

    生日:2012-12-12

    在12-12-2012我不知道这是一个月的一天,这是一个月,但你可以换dd为一个月的一天,MM如果需要一个月格式模式字符串。

    最后,如果这是新代码,则您可能更喜欢使用Java.time(现代Java日期和时间API)而不是Joda-Time。Joda-Time项目的官方建议说要迁移。

    链接 Oracle教程:Date Time说明如何使用java.time。 维基百科文章:ISO 8601

    回答来源:Stack Overflow

    2020-03-25 21:21:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载