Class SpringBootNutzJsonMessageConverter

java.lang.Object
org.springframework.http.converter.AbstractHttpMessageConverter<Object>
org.springframework.http.converter.AbstractGenericHttpMessageConverter<Object>
org.springframework.http.converter.json.AbstractJsonHttpMessageConverter
tech.riemann.nif.nutz.json.SpringBootNutzJsonMessageConverter
All Implemented Interfaces:
org.springframework.http.converter.GenericHttpMessageConverter<Object>, org.springframework.http.converter.HttpMessageConverter<Object>

public class SpringBootNutzJsonMessageConverter extends org.springframework.http.converter.json.AbstractJsonHttpMessageConverter
Nutz JSON 消息转换器,用于在 Spring Boot 中集成 Nutz 的 JSON 处理能力。 支持通过配置忽略特定类型或 URI 的序列化与反序列化操作,并支持动态控制 JSON 格式。

M36: 原实现单例持有 HttpServletRequest(请求作用域对象,线程安全风险),现改为从 RequestContextHolder 按线程获取当前请求;supports(Class) 收窄—— 基础类型/String 交还 Jackson,避免 Nutz 全面接管导致 Jackson 注解(脱敏/格式化)失效。

Author:
Kerbores(kerbores@gmail.com)
  • Field Summary

    Fields inherited from class org.springframework.http.converter.json.AbstractJsonHttpMessageConverter

    DEFAULT_CHARSET

    Fields inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

    logger
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    canWrite(@Nullable Type type, @NonNull Class<?> clazz, @Nullable org.springframework.http.MediaType mediaType)
    判断当前消息是否可以被写出。
    protected @NonNull Object
    readInternal(@NonNull Type resolvedType, @NonNull Reader reader)
     
    setFormat(org.nutz.json.JsonFormat format)
    设置 JSON 输出格式
    setIgnoreTypes(List<String> ignoreTypes)
    设置需要忽略处理的类名匹配规则列表
    setignoreUris(List<String> ignoreUris)
    设置需要忽略处理的 URI 匹配规则列表
    protected boolean
    supports(@NonNull Class<?> clazz)
    判断是否支持指定类型的解析
    protected void
    writeInternal(@NonNull Object o, @NonNull Type type, @NonNull Writer writer)
     

    Methods inherited from class org.springframework.http.converter.json.AbstractJsonHttpMessageConverter

    read, readInternal, setJsonPrefix, setPrefixJson, writeInternal

    Methods inherited from class org.springframework.http.converter.AbstractGenericHttpMessageConverter

    canRead, write, writeInternal

    Methods inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

    addDefaultHeaders, canRead, canRead, canWrite, canWrite, getContentLength, getDefaultCharset, getDefaultContentType, getSupportedMediaTypes, read, setDefaultCharset, setSupportedMediaTypes, supportsRepeatableWrites, write

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.springframework.http.converter.HttpMessageConverter

    canRead, canWrite, getSupportedMediaTypes, getSupportedMediaTypes, read, write
  • Constructor Details

    • SpringBootNutzJsonMessageConverter

      public SpringBootNutzJsonMessageConverter()
  • Method Details

    • setIgnoreTypes

      public SpringBootNutzJsonMessageConverter setIgnoreTypes(List<String> ignoreTypes)
      设置需要忽略处理的类名匹配规则列表
      Parameters:
      ignoreTypes - 类型名称的正则表达式列表
      Returns:
      当前实例以支持链式调用
    • setignoreUris

      public SpringBootNutzJsonMessageConverter setignoreUris(List<String> ignoreUris)
      设置需要忽略处理的 URI 匹配规则列表
      Parameters:
      ignoreUris - URI 的正则表达式列表
      Returns:
      当前实例以支持链式调用
    • setFormat

      public SpringBootNutzJsonMessageConverter setFormat(org.nutz.json.JsonFormat format)
      设置 JSON 输出格式
      Parameters:
      format - JSON 格式对象
      Returns:
      当前实例以支持链式调用
    • supports

      protected boolean supports(@NonNull Class<?> clazz)
      判断是否支持指定类型的解析

      M36: 收窄支持范围——基础类型/String/Number/Boolean/Character 交还 Jackson (Jackson 注解 @JsonIgnore/@JsonFormat/脱敏在这些类型上语义更完整); ignoreTypes 匹配的类型也不支持(与 canWrite 一致)

      Overrides:
      supports in class org.springframework.http.converter.AbstractGenericHttpMessageConverter<Object>
      Parameters:
      clazz - 待判断的类
      Returns:
      是否由本转换器处理
    • canWrite

      public boolean canWrite(@Nullable Type type, @NonNull Class<?> clazz, @Nullable org.springframework.http.MediaType mediaType)
      判断当前消息是否可以被写出。会根据类型和 URI 进行过滤判断。
      Specified by:
      canWrite in interface org.springframework.http.converter.GenericHttpMessageConverter<Object>
      Overrides:
      canWrite in class org.springframework.http.converter.AbstractGenericHttpMessageConverter<Object>
      Parameters:
      type - 泛型类型信息
      clazz - 实际运行时类
      mediaType - 媒体类型
      Returns:
      如果允许写出则返回 true,否则返回 false
    • readInternal

      protected @NonNull Object readInternal(@NonNull Type resolvedType, @NonNull Reader reader) throws Exception
      Specified by:
      readInternal in class org.springframework.http.converter.json.AbstractJsonHttpMessageConverter
      Throws:
      Exception
    • writeInternal

      protected void writeInternal(@NonNull Object o, @NonNull Type type, @NonNull Writer writer) throws Exception
      Specified by:
      writeInternal in class org.springframework.http.converter.json.AbstractJsonHttpMessageConverter
      Throws:
      Exception