[SOLVED] Android: org.modelmapper.ModelMapper – No serializer found for class…and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) – 1 min solution!

Android: [SOLVED] org.modelmapper.ModelMapper – No serializer found for class…and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
Photo by Johny vino on Unsplash
Share this post and Earn Free Points!

You can encounter this problem when you use org.modelmapper.ModelMapper library and class. In most cases the issue is that you don’t provide the Constructors and/or Getters and Setters for you class.

Type definition error: [simple type, class com.bigdataetl.model.dto.PersonDto]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.bigdataetl.model.dto.PersonDto and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0])",

Introduction

ModelMapper

ModelMapper is a Java library that allows developers to easily map objects from one class to another. It is designed to simplify the process of converting objects from one type to another, especially when the objects have different structures or when the data needs to be transformed in some way during the mapping process.

To use ModelMapper, you first need to create an instance of the ModelMapper class. You can then use the map method to map an object of one type to an object of another type. The ModelMapper library will automatically handle the conversion of field values from the source object to the destination object, based on the configuration that you have specified.

You can also use the createTypeMap method to specify custom mappings between fields in the source and destination objects. This can be useful if the field names or data types are different between the two objects, or if you need to perform additional processing on the field values during the mapping process.

In addition to the map method, ModelMapper also provides several other utility methods that can be useful when working with object mapping. These include methods for converting objects to and from maps, and for converting objects to and from JSON.

Java Lombok

Lombok is a Java library that provides a set of annotations and tools that can be used to simplify the process of writing Java code. It is designed to reduce the amount of boilerplate code that is required to write Java programs, particularly when working with objects and their associated getters, setters, and constructors.

Some of the key features of Lombok include:

  • Automatic generation of getters, setters, and constructors for objects.
  • Support for creating immutable objects.
  • Support for creating and working with builder objects.
  • Annotations for generating toString, hashCode, and equals methods.
  • Support for generating loggers.

To use Lombok in your project, you will need to include it as a dependency in your build file (such as Maven or Gradle) and configure your development environment to recognize the Lombok annotations. You will also need to install a Lombok plugin for your IDE if you want to use it while writing code.

Possible Solutions

It looks like you are trying to use the ModelMapper library to map an object to another object, but you are encountering an error that says “No serializer found for class android”. This error typically occurs when the ModelMapper library is trying to map a field in the source object to a field in the destination object, and it cannot find a suitable converter or serializer to handle the data type of the field.

There are a few possible solutions to this problem:

  1. Make sure that you have properly configured the ModelMapper instance by setting up the appropriate mappings between the fields in the source and destination objects. You can use the createTypeMap method to specify how fields in the source object should be mapped to fields in the destination object.
  2. If you are trying to map a field that is of a complex data type (such as a nested object or a collection), you may need to provide a custom converter or serializer to handle the mapping of this field. You can use the addConverter method to register a custom converter with the ModelMapper instance.
  3. If the error is occurring for a field that is a basic data type (such as a string or a number), it is possible that the field names in the source and destination objects do not match. Make sure that the field names are the same in both objects.

Solution With Lombok

Using Lombok if you use these three annotations, Lombok provides Constructors, Getters and Setters.

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PersonDto {

    private String id;

    private String name;

    private int age;

}

Solution Without Lombok

As you can see without Lombok you have to provide Constructors, Getters and Setters on your own. It’s not a convenient way. I encourage you to use Lombok in the future 🙂

public class PersonDto {

    private String id;

    private String name;

    private int age;

    public PersonDto(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public PersonDto() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Summary

I hope I helped you solve the problem you encountered.

Could You Please Share This Post? 
I appreciate It And Thank YOU! :)
Have A Nice Day!

How useful was this post?

Click on a star to rate it!

Average rating 4.9 / 5. Vote count: 2239

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?