一尘不染

Spring 3.1 JSON日期格式

spring

我正在使用带注释的Spring 3.1 MVC代码(spring-mvc),当我通过@RequestBody发送日期对象时,日期显示为数字。这是我的控制器

@Controller
@RequestMapping("/test")
public class MyController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class,
                  new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
    }


    @RequestMapping(value = "/getdate", method = RequestMethod.GET)
    public @ResponseBody Date getDate(@RequestParam("dt") Date dt, Model model) {
        // dt is properly constructed here..
        return new Date();
    }
}

当我传递日期时,我能够以格式接收日期。但是我的浏览器将日期显示为数字

1327682374011

如何以我为Webbinder注册的格式显示日期?我在某个论坛上看到我应该使用杰克逊映射器,但是我不能更改现有的映射器吗?


阅读 420

收藏
2020-04-15

共1个答案

一尘不染

为了覆盖Jakson的默认日期格式策略,请遵循以下步骤:

  1. 扩展JsonSerializer以创建用于处理日期格式的新类
  2. 覆盖serialize(Date date, JsonGenerator gen, SerializerProvider provider)功能以所需的格式格式化日期并将其写回到生成器实例(gen)
  3. 使用以下命令注释日期获取器对象以使用扩展的json序列化程序 @JsonSerialize(using = CustomDateSerializer.class)
    码:
//CustomDateSerializer class
public class CustomDateSerializer extends JsonSerializer<Date> {    
    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2) throws 
        IOException, JsonProcessingException {      

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(value);

        gen.writeString(formattedDate);

    }
}


//date getter method
@JsonSerialize(using = CustomDateSerializer.class)
public Date getDate() {
    return date;
}
2020-04-15