当前位置: 首页 > 知识库问答 >
问题:

在Spring中无法将String转换为Date

潘俊
2023-03-14

我有以下代码:

DTO:

 Class MyDTO {
        import java.util.Date;
        private Date dateOfBirth;

        public Date getDateOfBirth() {
                return dateOfBirth;
            }
        public void setDateOfBirth(Date dateOfBirth) {
                this.dateOfBirth = dateOfBirth;
            }

    }

控制器

public void saveDOB(@RequestBody MyDTO myDTO, HttpServletRequest httprequest, HttpServletResponse httpResponse) {
       System.out.println("Inside Controller");
       System.out.println(myDTO.getDateOfBirth()); 
}

JSON请求:

{
"dateOfBirth":"2014-09-04",

}

如果我以yyyy-mm-dd的形式发送请求,将自动转换为日期对象。控制器中的输出:-dateOfBirth=2014年9月4日星期四05:30:00

但是当我以dd-mm-yyyy格式发送DateofBirth时,它不会自动将String转换为Date。所以我如何处理这种情况。

JSON请求:

{
"dateOfBirth":"04-09-2014",

}

输出:控制台中的任何输出都不会到达控制器。

我尝试过@DateTimeFormat,但它不起作用。

我使用的是Spring 4.02,请建议我们是否可以使用任何注释。

共有2个答案

米楚青
2023-03-14

List item创建一个类来扩展JsonDeserializer

public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        String date = jsonParser.getText();
        try {
            return format.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

setter方法上使用@jsondeselliate(using=CustomJsonDateDeserializer.class)注释。

感谢@Varun Achar回答,网址

夏锐藻
2023-03-14

@DateTimeFormat用于表单支持(命令)对象。您的JSON由Spring的MappingJackson2HttpMessageConverter中的Jackson的ObjectMapper处理(默认情况下)(假设是Jackson的最新版本)。这个ObjectMapper有许多它可以处理的默认日期格式。看起来yyyy-mm-dd是其中之一,但dd-mm-yyyy不是。

您需要使用ObjectMapper注册自己的日期格式,并使用MappingJackson2HttpMessageConverter注册该ObjectMapper。以下是各种方法:

  • 在Spring配置ObjectMapper
  • Spring、Jackson和定制(例如CustomDeserializer)

或者,您可以在整个类或其字段之一(日期)上使用JsonDeserializer。下面链接中的示例

  • 在Spring中编写JSON反序列化程序或对其进行扩展的正确方法
  • 如何使用Jackson反序列化JS date
 类似资料:
  • 问题内容: 我写了一个函数将字符串转换为整数 我有一个字符串6042076399,它给了我错误: 这不是将字符串转换为整数的正确方法吗? 问题答案: 这是我更喜欢的方式: 编辑(2015年4月4日): 如下面的评论所述,实际上这样做更好:

  • 我在拔头发。 我试过用猫鼬: NodeJs本地mongoDb驱动程序

  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转

  • 我从rest调用中获得了一个json,其格式为{“D1”:1,“D2”:1,“D3”:0,“D4”:1},它在db中存储为-{D1=1,D2=1,D3=0,D4=1}。 到目前为止我已经试过了,但没有成功- JSONParser parser=新的JSONParser();JSONObject json=(JSONObject)parser.parse(jsonString); 我想把这个json

  • 问题内容: 有没有办法将a 变成a 或将一个字母变成a (例如如何将a 变成a 和a 变成an )?(如果可以,请链接到相关文档)。 我该如何找到在文档中才隐约知道的类似内容? 问题答案: 您可以通过确定可能涉及的类来查找文档。在这里,候选人是和。 您应该先熟悉以下内容: 原始包装 中的Java Collection框架 它还有助于通过教程更慢地介绍API。 处理字符串中的字符

  • 本文向大家介绍在Java中将String转换为StringBuilder,包括了在Java中将String转换为StringBuilder的使用技巧和注意事项,需要的朋友参考一下 StringBuilder类的append()方法接受一个String值,并将其添加到当前对象。 要将String值转换为StringBuilder对象- 获取字符串值。 使用append()方法将获取的字符串追加到St