Существует ли конфигурация, позволяющая Джексону изящно обрабатывать несоответствие членов между типом переменной члена и типом, используемым в получателе / установщике? Например, если объявлена закрытая переменная с типом Long и ее методы доступа используют тип long , у нас возникла проблема. Кроме того, мы имеем дело с кодом, который нельзя изменить:
Например, рассмотрим этот класс:
public class EventArgs {
private Long id;
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
Рассмотрим соответствующий тест:
@Test
public void shouldSerializeToString() {
ObjectMapper mapper = new ObjectMapper();
String value = null;
try {
value = mapper.writeValueAsString(new EventArgs());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
Assert.assertNotNull(value);
}
Тестзавершается с этим исключением:
com.fasterxml.jackson.databind.JsonMappingException: (было java.lang.NullPointerException) (через цепочку ссылок: com.sailpoint.orchestration.zeebe.model.EventArgs ["id "]) в com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath (JsonMappingException.java:394) в com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath (JsonMappingException.java:353) в com.fx. .ser.std.StdSerializer.wrapAndThrow (StdSerializer.java:316) при com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase.java:729) при com.fasterxml.jackson.databind.ser.BeanSerializer.serialize (BeanSerializer.java:166) в com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize (DefaultSerializerProvider.java:480) вcom.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue (DefaultSerializerProvider.java:319) в com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue (ObjectMapper.java:4094.ind.ject.ject.ject.ject.ject. writeValueAsString (ObjectMapper.java:3404) в com.sailpoint.orchestration.zeebe.workers.EventArgsTests.shouldSerializeToString (EventArgsTests.java:19) в sun.reflect.NativeMethodAccessorImpl.invoke.homp.hotef ()NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.un.mo.Me. runReflectiveCall (FrameworkMethod.java:50) в org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExplosivejg ().junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17) в org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4Cunjit.itunit.itunit.itunit.unun.itun.unun.unun.unun.it.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.schedule или родительский классjunit.runners.ParentRunner.runChildren (ParentRunner.java:288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner )jпо адресу org.junit.runners.ParentRunner.run (ParentRunner.java:363) по адресу org.junit.runner.JUnitCore.run (JUnitCore.java:137) по адресу com.intellij.junit4.JUnit4IdeaTestRunner.Unt) в com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner.java:47) в com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart (JUnitjava: 242) at com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:70). Причина: java.lang.NullPointerException в com.sailpoint.orchestration.zeebe.model.EventArgs.getId (EventArgs. Java: 18) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessormphoj (в java.lang.reflect.Method.invoke (Method.java:498) в com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField (BeanPropertyWriter.java:688) в com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase.java:721) ... еще 28
java.lang.AssertionError at org.junit.Assert.fail (Assert.java:86) в org.junit.Assert.assertTrue(Assert.java:41) в org.junit.Assert.assertNotNull (Assert.java:712) в org.junit.Assert.assertNotNull (Assert.java:722) в com.sailpoint.orchestration.zeebe.workers.EventArgsTests. shouldSerializeToString (EventArgsTests.java:24) в sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:jmpho.java.jpg). в java.lang.reflect.Method.invoke (Method.java:498) в org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) в org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47) в org.junit.internal.runners.eetateInvokeMethod.java:17) в org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.jrjjununununununun.unjun.unj) .78))(BlockJUnit4ClassRunner.java:57) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) в org.junit.unnersParentRunner.runChildren (ParentRunner.java:288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в org.junit.runners.ParentRunner $ 2.оценке (ParentRunner.java:268itg или в.runners.ParentRunner.run (ParentRunner.java:363) в org.junit.runner.JUnitCore.run (JUnitCore.java:137) в com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerTitAIJ (tRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner.java:47) в com.intellij.rt.execution.junit.JUnitStarter.prepStStart.And ()на com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:70)