У меня есть простой случай, когда я хочу применить нулевую проверку значений, найденных в строке JSON, при преобразовании строки JSON в POJO с использованием Jackson (2.8) и Lombok (последняя версия) в Java8.Но похоже, что @NonNull
не выдает исключение, когда pojo создается с использованием ObjectMapper.convertValue
, но работает нормально, когда pojo создается нормально с использованием шаблона компоновщика "?
, вот мой случай:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Lombok;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class LearnJackson {
public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
public static void main(final String[] args) throws IOException {
learnToConvertJsonToSimplePojo();
}
public static void learnToConvertJsonToSimplePojo() throws IOException {
String jsonString = "{}";
JsonNode node = OBJECT_MAPPER.readValue(jsonString, JsonNode.class);
// this is supposed to throw NullPointerException
MySimplePojo o = OBJECT_MAPPER.convertValue(node, MySimplePojo.class);
log.info("o.getVar1: {}, o.getVar2: {}", o.getVar1(), o.getVar2()); // prints null
// MySimplePojo.builder().build(); // this throws NullPointerException correctly
}
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public static class MySimplePojo {
@NonNull
private String var1;
@NonNull
private List<String> var2;
}
}