解决前端回显日期 :竖立 —— 横向

目录

效果展示

实现意义

实现思路(代码)

方案一

方案二

方案比较

方案一优点与缺点

方案二优点与缺点

项目推荐应用方案


效果展示

左图data日期格式为竖立排列,右图则为优化效果。

实现意义

提高可读性:横向排列可以让用户在浏览数据时视线移动更自然,尤其是在表格形式的数据展示中,横向布局可以使得每条记录的信息更加紧凑和连续,减少上下滚动的需要。

优化空间利用:对于包含多个日期字段的复杂数据结构,横向排列可以帮助更好地利用屏幕宽度,尤其在宽屏显示器上,避免了纵向空间的浪费,并且可以在不增加页面长度的情况下显示更多信息。

适应响应式设计:现代网页设计趋向于响应式,即能够在不同的设备上提供良好的用户体验。横向排列的日期字段更容易适配不同尺寸的屏幕,尤其是移动设备上的横向滚动比纵向滚动更为友好。

支持数据分析:如果前端应用涉及到数据分析功能,横向排列的数据格式更易于集成图表、趋势线等可视化元素,方便用户进行深入分析。

实现思路(代码)

方案一

使用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解来格式化Java对象中的日期字段,在序列化为JSON格式时,可以指定日期时间的显示格式。

在通过直接在实体类的字段或getter方法或传递对应日期格式的字段上添加注解。


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Serializable {

    private static final long serialVersionUID = 1L; // 序列化ID

    private Integer studentId; // 学生ID

    private String name; // 学生姓名

    private Integer gender; // 性别

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime birthDate; // 出生日期

    private String major; // 专业

    private String grade; // 年级

    private String className;// 班级

}

例如:以上在出生日期加入注解,可以实现指定日期的显示格式(自定义)。

方案二

扩展Spring MVC框架的消息转换器来处理前端回显日期的问题,将日期字段从竖向排列改为横向排列的需求,主要涉及自定义消息转换逻辑以满足特定的数据格式化要求。

步骤一:在WebMvcConfiguration配置类中重写extendMessageConverters这个方法,扩展一个消息转换器。

步骤二:为消息转换器提供对应的对象转换器。

步骤一实现如下:

    /**
     * 扩展Spring MVC框架的消息转化器 解决问题:前端回显日期 (竖立 → 横向)
     * @param converters
     */
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建一个消息转换器对象
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
        converter.setObjectMapper(new JacksonObjectMapper());
        //将自己的消息转化器加入容器中
        converters.add(0,converter);
    }

步骤二实现如下:

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {

    //定义默认的日期时间格式
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        //调用父类 ObjectMapper 的构造函数
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        //创建一个 SimpleModule 实例,用于注册自定义的序列化器和反序列化器
        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        //将 simpleModule 注册到当前的 ObjectMapper 实例中,使其生效
        this.registerModule(simpleModule);
    }
}

上述代码都提供了相应的注释,你可以通过注释去分析以上代码。

方案比较

方案一优点与缺点

优点:

简化代码:通过直接在实体类的字段或getter方法上添加注解,可以非常简洁地定义日期格式,无需编写额外的序列化/反序列化逻辑。

增强可读性:明确指定了日期时间的输出格式,使得生成的JSON数据更加易读,对于前后端交互来说尤其有用,前端可以直接使用这种格式而不需要额外处理。

灵活性:可以根据需要轻松更改日期格式,只需修改pattern参数即可,方便应对不同的业务需求或国际化场景。

统一管理:在一个地方(即实体类中)集中定义日期格式,有助于在整个项目中保持一致的日期时间表示形式,便于维护和更新。

缺点:

仅限于Jackson框架:此注解是Jackson库的一部分,如果你的项目使用的是其他JSON处理库(如Gson),则需要寻找相应的解决方案或者转换成兼容的形式。

可能影响性能:虽然通常情况下影响不大,但在处理大量日期对象时,频繁的日期格式化操作可能会对性能产生一定影响。

反序列化问题:虽然@JsonFormat主要用于控制序列化输出的格式,但它也可以影响反序列化的行为。如果输入的JSON数据格式与指定的格式不匹配,则可能导致解析错误。因此,确保前后端使用的日期格式一致非常重要。

局部适用性:该注解只能应用于被标记的字段或方法,如果希望在整个应用程序范围内统一日期格式,则需要在每个相关的字段或方法上都加上这个注解,或者配置全局的日期格式化策略。

方案二优点与缺点

优点:

统一管理:通过全局配置日期格式,可以在整个应用中保持一致的日期表示形式,简化了代码维护工作。

灵活性:可以根据项目需求灵活调整日期格式,不仅限于一种固定的模式,还可以根据不同API接口的要求进行定制。

增强兼容性:确保前后端使用的日期格式一致,减少了因格式不匹配导致的问题,提高了系统的稳定性。

性能优化:相比在每个实体类上都使用注解的方式,全局配置可能带来更高效的性能表现,尤其是在处理大量数据时。

支持复杂场景:能够更好地适应复杂的业务逻辑,如国际化、不同的时间区域等。

缺点:

复杂度增加:虽然提供了更多的控制,但也增加了项目的复杂度,特别是对于新手开发者来说,理解和维护这些配置可能会有一定难度。

潜在的副作用:全局修改日期格式可能会影响到未预期的部分,特别是在大型项目中,任何全局性的改变都需要谨慎评估其影响范围。

限制灵活性:尽管全局配置提供了统一性,但它也可能限制了个别情况下对特定日期格式的需求。如果某些API需要特殊的日期格式,则可能还需要额外的处理逻辑。

前端适配:虽然后端提供了合适的数据结构,但真正实现从竖向到横向的转变仍需前端配合,这可能涉及到前端代码的调整或重构。

项目推荐应用方案

@JsonFormat提供了一种简便的方式来格式化Java对象中的日期时间字段,非常适合快速开发和小规模应用。

通过扩展Spring MVC的消息转换器来解决前端回显日期的问题是一种有效的方法,它能够在保证系统一致性的同时提供足够的灵活性。对于大型企业级应用而言,这种做法则非常有价值

综上所述:

小型项目:推荐使用@JsonFormat注解来简化日期格式化的工作,因为这种方式简单易用,能够快速满足项目需求,同时保持较低的学习曲线和维护成本。

大型项目:建议采用自定义消息转换器或全局配置ObjectMapper的方法,这样可以更好地管理和优化日期格式化过程,适应更大规模的应用需求,并为未来的扩展留出空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值