How to deserialize json data and get rid of all the excess information

Viewed 63

I'm having a problem with deserializing json object into DTO class. The dto object has the following structure:

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@JsonIgnoreProperties(value = { "charsetinfo" })
public class SingleEngineJsonDto {
    public List<SingleEngineDTO> engine;
    public List<Timetable> timetable;
    public List<Dailytable> dailytable;
}

And the output is:

       [SingleEngineJsonDto(engine=null, timetable=null, dailytable=null),
 SingleEngineJsonDto(engine=[SingleEngineDTO(name=state, … some data)], 
    timetable=[Timetable(weekDay=1,some data), more data], 
    dailytable=[Dailytable(date=2018-05-09, more data), more data])]

How do I get rid of this([SingleEngineJsonDto(engine=null, timetable=null, dailytable=null)) part? Original json contains metadata, that I don't need. The firs object in a big json object is ignored metadata and null fields, the second one is null fields filled in. The only idea that I have is list.get(1). And I was told that this solution is wrong.

UPDATE: Original json structure:

 [{"charsetinfo":{"name": "utf-8"}},{"engine":
[{"NAME": "stock","title": some data}],
    "timetable":[{"week_day":1,"is_work_day":1,some data},
     more data],"dailytable":[{"date": "2018-05-09","is_work_day":0,"start_time": "10:00:00",data}]}]

Desirialization:

@FeignClient(value = "engine", url = "engine")
public interface EngineClient {
    @GetMapping
    List<EngineJsonDto> getEngines(URI enginesUri,
                                   @RequestParam(value = "lang", required = false) String lang);
    @GetMapping
    List<SingleEngineJsonDto> getEngine(URI engineUri, @RequestParam(value = "lang", required = false) String lang);
}

Service gets the data from client and gets a list of dto to work with. I use facory pattern to get pieces of data to work with parameters(engine,timetable,dailytable), and all of them had to look the same:

@Service
public class EngineParamEngine implements EngineFactoryInterface {

    @Override
    public List<SingleEngineDTO> getEngineObjectPart(List<SingleEngineJsonDto> list){
        return list.get(1).getEngine();  //<<this
    }
}

I was told to change it to list.get(0).Which gives me (engine=null, timetable=null, dailytable=null). So, I need to make the first object disappear somehow. I'm sorry, English is not my first language and I'm new to programming.

0 Answers
Related