full-stack-skills/java-skills

jackson-patterns

Jackson JSON 序列化技能。覆盖日期格式配置(非ISO-8601)、Null序列化规则(数组→[]/字符串→""/数字→null)、@JsonView分层、ObjectMapper单例规则、TypeReference泛型反序列化、@JsonProperty/@JsonFormat/@JsonIgnore注解原则、与Spring Boot集成。 当用户处理JSON序列化/反序列化、配置ObjectMapper、解决日期格式或null处理问题时使用。

View source

How to use

  1. Copy the installation command and review the source package before installing it in your own agent environment.
  2. Check the source document for required tools, credentials and supported hosts.
  3. Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/full-stack-skills/java-skills --skill jackson-patterns

Before you start

  • Installation does not include a model subscription, API allowance or permission to access your files.
  • Repository stars and installation counts describe activity, not an independent quality or security test.
Original skill document

Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.

Jackson JSON 序列化

编码 Jackson 的使用规则。LLM 默认配置 SerializationFeature.WRITEDATESAS_TIMESTAMPS=true,但中国开发者期望 yyyy-MM-dd HH:mm:ss。

Capability Boundaries

✅ Strong Suits

  1. 日期格式 — yyyy-MM-dd HH:mm:ss(非ISO-8601),与Spring Boot集成
  2. Null序列化 — 数组→[]/字符串→""/数字→null/布尔→null(规则不一致要明确)
  3. @JsonView — 同一对象不同场景返回不同字段(列表vs详情)
  4. TypeReference — 正确反序列化泛型类型(List<User>等)
  5. @JsonProperty/@JsonFormat/@JsonIgnore — 字段重命名/格式化/忽略

❌ Out of Scope

  1. Java Bean 映射 → MapStruct(编译期生成,Jackon是序列化不是映射)
  2. JSON 为API格式,内部对象映射用 MapStruct

LLM最常犯的错误

#错误正确做法
1日期序列化为时间戳 1702468800000配置 WRITE_DATES_AS_TIMESTAMPS=false,格式 yyyy-MM-dd HH:mm:ss
2null 字段不返回或返回 null明确规则:数组→[]、字符串→""、数字→null、布尔→null
3每次 new ObjectMapper()ObjectMapper 是线程安全的,应用级单例
4objectMapper.readValue(json, List.class)objectMapper.readValue(json, new TypeReference<List<User>>(){})
5标准JSON格式不与其他系统对齐带 NullNode/WRITEBIGDECIMALAS_PLAIN 等需要显式配置

核心规则速查

java
// ✅ Spring Boot 配置(ObjectMapper全局)
@Configuration
public class JacksonConfig {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> builder
            .simpleDateFormat("yyyy-MM-dd HH:mm:ss")
            .serializationInclusion(JsonInclude.Include.NON_NULL)
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .featuresToEnable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
    }
}

// ✅ 注解方式
@Data
public class UserVO {
    @JsonProperty("user_name")   // JSON字段重命名
    private String username;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @JsonIgnore                  // 序列化时忽略
    private String password;

    @JsonView(Views.Detail.class) // 仅详情视图返回
    private String email;
}

// ✅ TypeReference 反序列化
List<User> users = objectMapper.readValue(json,
    new TypeReference<List<User>>(){});

// ✅ Null值处理规则
objectMapper.configOverride(String.class)
    .setInclude(JsonInclude.Value.construct(
        JsonInclude.Include.NON_NULL,  // null string → null
        JsonInclude.Include.NON_NULL
    ));

Gotchas

  1. ObjectMapper 是线程安全的 — 不要每次 new,使用单例
  2. TypeReference 必不可少 — 泛型反序列化不用 TypeReference 会得到 LinkedHashMap
  3. @JsonProperty 只影响序列化 — 不影响 Java 字段名
  4. WRITE_DATES_AS_TIMESTAMPS 默认 true — Spring Boot 默认改为 false
  5. Jackson 的 @JsonFormat 和 Spring 的 @DateTimeFormat 不同 — 前者JSON后者表单/Query参数
  6. 默认不能反序列化 LocalDateTime — 需要 jackson-datatype-jsr310 依赖
  7. @JsonIgnore 和 @JsonProperty(access=READ_ONLY) 的区别 — @JsonIgnore 双向忽略,access控制方向
  8. null 数字不会自动变 0 — 需要全局 include=NON_NULL 或单独配置

Data Privacy

本技能不收集、存储或传输任何用户数据。

from this repository

More skills

All skills
full-stack-skills
Community

easyexcel-fill

基于 Alibaba EasyExcel(com.alibaba:easyexcel:4.0.3)的 Excel 模板填充技能。覆盖简单对象填充、列表填充({.}+forceNewRow)、横向多列组合填充(FillWrapper+WriteDirectionEnum.HORIZONTAL)、复杂填充(含合计行/统计行/先 fill 后 write)、Spring Boot 集成、模板设计规范、转义字符、03版/07版差异、性能优化(分次 fill、文件缓存)。当用户需要把 Java 对象或 Map 数据按预制 .xlsx 模板(变量语法 {var}、{.}、{prefix.})填充生成报表(工资条/合同/对账单/发票/财务报表/统计表/汇总表)时使用此技能,不适用于不基于模板的"程序生成 Excel"场景(改用 easyexcel-write)。

installs
1
GitHub stars
5
Updated
Sep 19
full-stack-skills
Community

guava-patterns

Google Guava 最佳实践模式。从官方 wiki 提炼,覆盖 Immutable集合的 of/copyOf/builder 三模式与防御性拷贝规则、Cache 选择决策(LoadingCache vs Cache vs Caffeine)、Joiner/Splitter 不可变流水线、CharMatcher 替代正则、Preconditions 格式化消息校验、CaseFormat 命名互转。 纠正 LLM 误用:手写不可变集合、ConcurrentHashMap 替代 Cache、不知 CharMatcher。

installs
1
GitHub stars
5
Updated
Sep 19
full-stack-skills
Community

java-code-comments

Provides comprehensive guidance for adding Java code comments following industry standards and best practices. This skill helps add class-level comments, method-level comments, and field-level comments to Java code. Use when the user wants to add comments to Java code, needs to document Java classes/methods/fields, wants to improve code documentation, or needs to generate JavaDoc comments. This skill covers Controller, Service, ServiceImpl, Mapper, Model, Entity, BO (Business Object), DTO, VO, a

installs
1
GitHub stars
5
Updated
Sep 19