小编Pep*_*mez的帖子

Jackson 忽略类序列化中的 getter

我正在尝试序列化一个我无法触及任何内容的类。问题是我想忽略一些getWhatever() getter 方法,但我无法使用@JsonIgnore标记 getter 方法,因为这意味着触及 DTO 类。

该序列化是通过 Spring REST Web 服务中的@RestController方法进行的,因此如果它能成为考虑到这一点的解决方案,那就太好了。

我想到了一个我不喜欢的解决方案...它将为我想要序列化的 DTO 类创建一个自定义序列化器,这样我就可以控制什么被序列化,什么不被序列化,然后,从@RestController,不是返回 DTO 类(我认为这是更优雅的),而是在使用ObjectMapper获取 JSON 字符串并强制自定义序列化程序后返回String 。

我不喜欢这个解决方案,因为:

  • 我必须为每个需要序列化的 DTO 类创建一个自定义序列化器,其中包含我不想序列化的 getter 方法
  • 我不喜欢返回表示 JSON 的字符串(代表 DTO)的解决方案...我更喜欢透明地执行此操作,并从方法返回 DTO 类,并让 Spring 自动化生成该转换

预先感谢您...任何帮助将不胜感激

编辑(解决方案) 由于@Cassio Mazzochi Molin 的想法,我终于采用了这个解决方案:

interface FooMixIn {
    @JsonIgnore
    Object getFoo();
    @JsonIgnore
    Object getBar();
}

@Service
public class ServiceFooSerializer extends SimpleModule{
    public ServiceFooSerializer(){
        this.setMixInAnnotation(Foo.class, FooMixIn.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

serialization spring dto jackson

8
推荐指数
1
解决办法
6505
查看次数

为 Spring 会话和自定义数据使用不同的 Redis 数据库

在我的 REST 控制器 Spring 项目中,我想将 Session 信息存储在 Redis 中,并将我的自定义信息(无论我需要什么)存储在 Redis 中,但是在一个单独的数据库中。

在我的application.properties 中,我定义了以下内容:

spring.session.store-type=redis
spring.session.redis.namespace=rdrestcore
spring.redis.host=192.168.201.46
spring.redis.port=6379
spring.redis.database=5

com.xyz.redis.host=192.168.201.46
com.xyz.redis.db=0
com.xyz.redis.port=6379
com.xyz.redis.pool.min-idle=5
Run Code Online (Sandbox Code Playgroud)

我还有一个包含以下代码的类(我在某个地方读到了我需要这个类只是为了让 Spring 管理 Redis 中的会话......正如你所看到的,它没有代码):

@Configuration
@EnableRedisHttpSession 
public class SessionConfig extends AbstractHttpSessionApplicationInitializer 
{}
Run Code Online (Sandbox Code Playgroud)

我终于有了一个像这样的 redis 连接工厂:

@Configuration
@EnableRedisRepositories
public class RdRedisConnectionFactory {
    @Autowired 
    private Environment env;
    @Value("${com.xyz.redis.host}")
    private String redisHost;
    @Value("${com.xyz.redis.db}")
    private Integer redisDb;
    @Value("${com.xyz.redis.port}")
    private Integer redisPort;
    @Value("${com.xyz.redis.pool.min-idle}")
    private Integer redisPoolMinIdle;

    @Bean
    JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();        
        if(redisPoolMinIdle!=null) poolConfig.setMinIdle(redisPoolMinIdle);

        return poolConfig;
    } …
Run Code Online (Sandbox Code Playgroud)

java session spring redis

5
推荐指数
1
解决办法
1986
查看次数

标签 统计

spring ×2

dto ×1

jackson ×1

java ×1

redis ×1

serialization ×1

session ×1