需要通过POJO类在Mongo DB中显示空值

我有一个写在spring boot框架之上的Spring batch应用程序,它被用来从oracle数据库读取数据(使用JDBCcursorItemreader)并写入Mongo数据库(MongoItemWriter)。对于每个表我都有一个POJO类。

是否有其他属性可以在mongo DB中包含空字段?

比如说。Oracle表

Mongo Collection:

{
"Name":"xyz",
"Number":"16"
}

想要下面的格式

{
"Name":"xyz",
"Number":"16",
"Date" : null
}

我想在mongo DB中显示日期列。我已经尝试使用jsoninclude属性,但它不工作。谁能对此提出建议?

代码 Batch File:

package com.sam.oracletomongo;

import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor;
import org.springframework.batch.core.job.builder.FlowBuilder;
import org.springframework.batch.core.job.flow.Flow;
import org.springframework.batch.core.job.flow.support.SimpleFlow;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.partition.PartitionHandler;
import org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler;
import org.springframework.batch.item.data.MongoItemWriter;
import org.springframework.batch.item.data.builder.MongoItemWriterBuilder;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder;
import org.springframework.batch.item.database.support.ListPreparedStatementSetter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.mongodb.core.MongoTemplate;

@Configuration
@EnableBatchProcessing
@Import(AdditionalBatchConfiguration.class)
public class BABatchConfig  {
    @Autowired
    public DataSource datasource;
    @Autowired
    public MongoTemplate mongotemplate;     
    
     @Autowired
        public JobBuilderFactory jobBuilderFactory;
        @Autowired
        public StepBuilderFactory stepBuilderFactory;
        @Bean
        @StepScope
        public JdbcCursorItemReader<BA> itemReaderBA(@Value("#{jobParameters[deltadate]}") String deltadate,@Value("#{jobParameters[rundate]}") String rundate) {
            ListPreparedStatementSetter listPreparedStatementSetter = new ListPreparedStatementSetter();    
            List<String> l1=new ArrayList<String>();
            l1.add(deltadate);
            l1.add(rundate);
            listPreparedStatementSetter.setParameters(l1);
            return new JdbcCursorItemReaderBuilder<BA>()
                .dataSource(datasource) // change accordingly if you use another data source
                .name("fooReader")
                .sql("SELECT SA_NO,SA_NAME,DATE1,DATE2,DATE3,ACTIVE FROM SAMPLE WHERE DATE2 between TO_DATE(?,'YYYY-MM-DD') and TO_DATE(?, 'YYYY-MM-DD')")
                .rowMapper(new BARowMapper())
                .preparedStatementSetter(listPreparedStatementSetter)
                .build();
        }               
        @Bean
        public MongoItemWriter<BA> writerBA(MongoTemplate mongoTemplate) {
            
            
            return new MongoItemWriterBuilder<BA>().template(mongoTemplate).collection("BA")
                    .build();
        }

       
    
        @Bean
public Job BAJob() {
            
            return jobBuilderFactory.get("BA")
                    .incrementer(new CustomParametersIncrementerImpl(datasource))
                    .start(BAstep())    
                    .build();
        }
        
        @Bean
        public Step BAstep() {
            return stepBuilderFactory.get("BAStep1")
                    .<BA, BA> chunk(10)
                    .reader(itemReaderBA(null,null))                    
                    .writer(writerBA(mongotemplate))

                    .build();
        }
       

            
      
}

Model Class:




package com.sam.oracletomongo;

public class BA {

private String _id;
private String saNo;
private String saName;
private String Date1;
private String Date2;
private String Date3;
private String active;

public String get_id() {
    return _id;
}
public void set_id(String _id) {
    this._id = _id;
}
public String getsaNo() {
    return saNo;
}
public void setBaNo(String saNo) {
    this.saNo = saNo;
}
public String getsaName() {
    return saName;
}
public void setBaName(String saName) {
    this.saName = saName;
}
public String getDate1() {
    return Date1;
}
public void setDate1(String Date1) {
    this.Date1 = Date1;
}
public String getDate2() {
    return Date2;
}
public void setDate2(String Date2) {
    this.Date2 = Date2;
}
public String getDate3() {
    return Date3;
}
public void setDate3(String Date3) {
    this.Date3 = Date3;
}
public String getActive() {
    return active;
}
public void setActive(String active) {
    this.active = active;
}
@Override
public String toString() {
    return "BA [_id=" + _id + ", saNo=" + saNo + ", saName=" + saName + ", Date1=" + Date1 + ", Date2="
            + Date2 + ", Date3=" + Date3 + ", active=" + active + "]";
}

}

Mapper Class:

package com.sam.oracletomongo;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

public class BARowMapper implements RowMapper<BA> {  
         
    public BA mapRow(ResultSet rs, int rowNum) throws SQLException 
    {  
            BA ba = new BA();
            String id=rs.getString("sA_NO");
            ba.set_id(id); 
            ba.setsaNo(rs.getString("sA_NO"));
            ba.setsaName(rs.getString("sA_NAME"));
            ba.setDate1(rs.getString("DATE1"));
            ba.setDate2(rs.getString("DATE2"));
            ba.setDate3(rs.getString("DATE3"));
            ba.setActive(rs.getString("ACTIVE"));
            return ba;  
    }  
        
}

StackOverflow:spring - Null values needs to be displayed in Mongo DB through POJO class - Stack Overflow