You can achieve that with Jackson (ObjectMapper).
// Raw data.
String data = "type: x, code: y, time: 25";
// Mapper raw data to map.
Map<String, String> map = Arrays.asList(data.split(","))
        .stream()
        .map(s -> s.split(":"))
        .collect(Collectors
                .toMap(
                        s -> s[0].trim(),
                        s -> s[1].trim()));
// Jackson's ObjectMapper.
final ObjectMapper objectMapper = new ObjectMapper();
final MyDTO myDTO = objectMapper.convertValue(map, MyDTO.class);
- Split entry pairs and convert string array to List<String>in order to usejava.lang.Collection.StreamAPI from Java 1.8,
- Map the resulting string list key:valueto a string array with[0]as key and[1]as value,
- Use .collect(..)terminal method from stream API to mutate,
- Use the Collectors.toMap()static method which take two function to perform mutation from input type to key and value type,
- All that's left is to convert the MaptoDTOwith theObjectMapper.
If there is a value in the raw data that is not in the DTO, see here to ignore it!