我正在尝试序列化一个我无法触及任何内容的类。问题是我想忽略一些getWhatever() getter 方法,但我无法使用@JsonIgnore标记 getter 方法,因为这意味着触及 DTO 类。
该序列化是通过 Spring REST Web 服务中的@RestController方法进行的,因此如果它能成为考虑到这一点的解决方案,那就太好了。
我想到了一个我不喜欢的解决方案...它将为我想要序列化的 DTO 类创建一个自定义序列化器,这样我就可以控制什么被序列化,什么不被序列化,然后,从@RestController,不是返回 DTO 类(我认为这是更优雅的),而是在使用ObjectMapper获取 JSON 字符串并强制自定义序列化程序后返回String 。
我不喜欢这个解决方案,因为:
预先感谢您...任何帮助将不胜感激
编辑(解决方案) 由于@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) 在我的 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)