Vas*_*sco 10 java rest spring-mvc jackson java-stream
我的应用程序是使用Spring boot(1.3.3.RELEASE)和spring mvc,spring data jpa hibernate构建的.MySql是数据库,Jackson是Json序列化器.在java 8上.
我想在我的控制器方法中返回一个庞大的数据集.我想要返回如下所示的对象流,而不是检索所有数据然后传入jackson序列化器.
@RequestMapping(value = "/candidates/all", method = RequestMethod.GET)
public Stream<Candidate> getAllCandidates(){
try {
return candidateDao.findAllByCustomQueryAndStream();
} catch(Exception e){
LOG.error("Exception in getCandidates",e);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我的DAO如下:
@Query("select c from Candidate c")
public Stream<Candidate> findAllByCustomQueryAndStream();
Run Code Online (Sandbox Code Playgroud)
但是,Jackson正在序列化流对象而不是流的内容.实际输出如下:
{"parallel" : false}
Run Code Online (Sandbox Code Playgroud)
如何指示Jackson序列化内容而不是流对象?
Vas*_*sco 13
多亏了这一点,我才能解决这个问题.
我提供了一个自定义的httpMessageConverter,它了解如何处理流.像这样:
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper =jsonConverter.getObjectMapper();
SimpleModule module = new SimpleModule("Stream");
module.addSerializer(Stream.class, new JsonSerializer<Stream>() {
@Override
public void serialize(Stream value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
serializers.findValueSerializer(Iterator.class, null)
.serialize(value.iterator(), gen, serializers);
}
});
objectMapper.registerModule(module);
jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8147 次 |
| 最近记录: |