Cómo crear constructor por defecto para la clase inmutable

SyncMaster:

Me gusta hacer mis objetos inmutables basan en este artículo (¿Por qué objetos deben ser inmutables) .

Sin embargo, yo estoy tratando de analizar un objeto utilizando Jackson asignador de objetos. Me estaba inicialmenteJsonMappingException: No suitable constructor found for type [simple type, class ]: cannot instantiate from JSON object.

Podría arreglarlo como se ha mencionado aquí , proporcionando un constructor por defecto y hacer mis campos no final.

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;

@AllArgsConstructor
// @NoArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Data
public class School {

    @NonNull
    private final String schoolId;

    @NonNull
    private final String schoolName;
}

¿Qué es un buen estilo de programación que debería seguir para superar este problema? Es la única manera de evitar es hacer que mis objetos mutable?

¿Puedo utilizar un asignador diferente que no utiliza el constructor por defecto?

ernest_k:

Se puede utilizar una fábrica Jackson (método anotado con @JsonCreator ) que lee los campos de un mapa y llama a su constructor no predeterminado:

class School {
    //fields

    public School(String id, String name) {
        this.schoolId = id;
        this.schoolName = name;
    }

    @JsonCreator
    public static School create(Map<String, Object> object) {
        return new School((String) object.get("schoolId"), 
                          (String) object.get("schoolName"));
    }

    //getters
}

Jackson llamará al createmétodo con una Mapversión de la JSON. Y esto resuelve eficazmente el problema.

Creo que sus miradas de interrogación para obtener una solución Jackson, en lugar de un nuevo patrón / estilo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=137939&siteId=1
Recomendado
Clasificación