Java Can';不要让杰克逊和龙目山一起工作
我正在尝试结合杰克逊和龙目舞。这些是我的课程:Java Can';不要让杰克逊和龙目山一起工作,java,netbeans,jackson,lombok,Java,Netbeans,Jackson,Lombok,我正在尝试结合杰克逊和龙目舞。这些是我的课程: package-testelombok; 导入com.fasterxml.jackson.annotation.JsonCreator; 导入com.fasterxml.jackson.annotation.JsonProperty; 导入lombok.allargsconstuctor; 进口龙目山价值; 进口龙目草; @价值观 @枯萎 @AllArgsConstructor(onConstructor=@_u(@JsonCreator)) 公共
package-testelombok;
导入com.fasterxml.jackson.annotation.JsonCreator;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入lombok.allargsconstuctor;
进口龙目山价值;
进口龙目草;
@价值观
@枯萎
@AllArgsConstructor(onConstructor=@_u(@JsonCreator))
公共类TestFoo{
@JsonProperty(“xoom”)
私有字符串x;
私人INTZ;
}
package-testelombok;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.xebia.jacksonlombok.jacksonlombokannotationintrosector;
导入java.io.IOException;
公共类TestLombok{
公共静态void main(字符串[]args)引发IOException{
TestFoo tf=新的TestFoo(“a”,5);
系统输出打印LN(带X(“b”));
ObjectMapper om=new ObjectMapper().SetAnnotationIntroSector(新JacksonLombokanNotationIntroSector());
System.out.println(om.writeValueAsString(tf));
TestFoo tf2=om.readValue(om.writeValueAsString(tf),TestFoo.class);
System.out.println(tf2);
}
}
这些是我要添加到classpth中的罐子:
- 龙目岛:(1.16.10版)
- 杰克逊注释:
- 杰克逊核心:
- Jackson数据绑定:
- 杰克逊·隆波克:
lib
”的文件夹中(以及“src
”、“nbproject
”、“test
”和“build
”)。我通过项目属性中的“addjar/Folder”按钮将它们添加到Netbeans中,它们按照上面列表的顺序列出。该项目是一个标准的“Java应用程序”类型的项目
此外,Netbeans项目被配置为“保存时不编译”、“生成调试信息”、“报告不推荐的API”、“跟踪java依赖项”、“Activate注释处理”和“编辑器中的Activate注释处理”。Netbeans中没有显式配置注释处理器或注释处理选项。此外,“-Xlint:all
”命令行选项在编译器命令行中传递,编译器在外部VM上运行
我的javac版本是1.8.0_72,我的java版本是1.8.0_72-b15。我的Netbeans是8.1
我的项目编译得很好。但是,它在执行时抛出一个异常。例外似乎不是任何看起来容易或明显可以修复的东西。以下是输出,包括stacktrace:
TestFoo(x=b,z=5)
{“z”:5,“xoom”:“a”}
线程“main”com.fasterxml.jackson.databind.JsonMappingException中的异常:构造函数[testelombok.TestFoo的构造函数,注释:{接口java.beans.ConstructorProperties=@java.beans.ConstructorProperties(值=[x,z]),接口com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}]没有属性名注释;当多参数构造函数被注释为创建者时,必须具有名称
在[Source:{“z”:5,“xoom”:“a”};第1行,第1列]
位于com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:296)
位于com.fasterxml.jackson.databind.deser.DeserializerCache.\u createAndCache2(DeserializerCache.java:269)
位于com.fasterxml.jackson.databind.deser.DeserializerCache.\u createAndCacheValueDeserializer(DeserializerCache.java:244)
位于com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
位于com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:475)
在com.fasterxml.jackson.databind.ObjectMapper.\u findRootDeserializer(ObjectMapper.java:3890)
位于com.fasterxml.jackson.databind.ObjectMapper.\u readMapAndClose(ObjectMapper.java:3785)
位于com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833)
TestLombok.TestLombok.main(TestLombok.java:14)
原因:java.lang.IllegalArgumentException:构造函数的参数#0[testelombok.TestFoo的构造函数,注释:{interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[x,z]),interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}]没有属性名称注释;当多参数构造函数被注释为创建者时,必须具有名称
位于com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.\u addDeserializerConstructors(BasicDeserializerFactory.java:511)
位于com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.\u ConstructionDefaultValueInstantiator(BasicDeserializerFactory.java:323)
位于com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.FindValue实例化器(BasicDeserializerFactory.java:253)
位于com.fasterxml.jackson.databind.desr.beandSerializerFactory.buildbeandSerializer(beandSerializerFactory.java:219)
位于com.fasterxml.jackson.databind.desr.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:141)
位于com.fasterxml.jackson.databind.deser.DeserializerCache.\u createDeserializer2(DeserializerCache.java:406)
位于com.fasterxml.jackson.databind.deser.DeserializerCache.\u createDeserializer(DeserializerCache.java:352)
在com.fasterxml.jackson.databind.deser.DeserializerCache.\u createAndCache2(DeserializerCache.java:264)
... 还有7个
我已经尝试过用@Value
和@allargsconstuctor
注释随机戳,但我没有做得更好
我搜索了例外情况,然后。然而,这仍然不能说明这个bug是什么或者如何修复它。而且,我找不到任何有用的东西来查找som
@Value
@Wither
@AllArgsConstructor(suppressConstructorProperties = true)
public class TestFoo {
@JsonProperty("xoom")
private String x;
private int z;
}
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@Data
@Accessors(fluent = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@Data
@Accessors(fluent = true)
@NoArgsConstructor
@AllArgsConstructor
public class Person {
String id;
String first;
String last;
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Person {
String id;
String first;
String last;
}
om.registerModule(new ParameterNamesModule());
om.setVisibility(FIELD, JsonAutoDetect.Visibility.ANY);
om.setVisibility(CREATOR, JsonAutoDetect.Visibility.ANY);
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import lombok.Builder;
import lombok.Value;
@JsonDeserialize(builder = Detail.DetailBuilder.class)
@Value
@Builder
public class Detail {
private String url;
private String userName;
private String password;
private String scope;
@JsonPOJOBuilder(withPrefix = "")
public static class DetailBuilder {
}
}
mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
@Override
public JsonPOJOBuilder.Value findPOJOBuilderConfig(AnnotatedClass ac) {
if (ac.hasAnnotation(JsonPOJOBuilder.class)) {//If no annotation present use default as empty prefix
return super.findPOJOBuilderConfig(ac);
}
return new JsonPOJOBuilder.Value("build", "");
}
});
if (_cfgConstructorPropertiesImpliesCreator
&& config.isEnabled(MapperFeature.INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIES)
public JacksonAnnotationIntrospector setConstructorPropertiesImpliesCreator(boolean b)
{
_cfgConstructorPropertiesImpliesCreator = b;
return this;
}
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Value;
@Value
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class LocationDto {
double longitude;
double latitude;
}
class ImmutableWithLombok {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
String stringJsonRepresentation = objectMapper.writeValueAsString(new LocationDto(22.11, 33.33));
System.out.println(stringJsonRepresentation);
LocationDto locationDto = objectMapper.readValue(stringJsonRepresentation, LocationDto.class);
System.out.println(locationDto);
}
}
lombok.anyConstructor.addConstructorProperties=true
@Data
@AllArgsConstructor
public class MyPojo {
@JsonProperty("Description")
private String description;
@JsonProperty("ErrorCode")
private String errorCode;
}
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class SomeClass
public class SomeClass {
// some code here
@JsonCreator
public static SomeClass factory(/* params here dressing them in @JsonProperty annotations*/) {
return new SomeClass();
}
}
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty
private boolean isAggregate;
Exception: Unrecognized field "isAggregate" (class
private Boolean isAggregate;
@Builder
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Person {
@JsonProperty("user_name")
private String name;
}
@JsonDeserialize(builder = MyDto.MyDtoBuilder.class)
@Builder
@Getter
public class MyDto {
@JsonProperty("user_id")
private String userId;
@JsonPOJOBuilder(withPrefix = "")
@JsonIgnoreProperties(ignoreUnknown = true)
public static class MyDtoBuilder {
}
}
lombok.anyConstructor.addConstructorProperties=true