আমি জ্যাকসন এবং লম্বোকের সংমিশ্রণে পরীক্ষা নিরীক্ষা করছি। সেগুলি আমার ক্লাস:
package testelombok;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.experimental.Wither;
@Value
@Wither
@AllArgsConstructor(onConstructor=@__(@JsonCreator))
public class TestFoo {
@JsonProperty("xoom")
private String x;
private int z;
}
package testelombok;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xebia.jacksonlombok.JacksonLombokAnnotationIntrospector;
import java.io.IOException;
public class TestLombok {
public static void main(String[] args) throws IOException {
TestFoo tf = new TestFoo("a", 5);
System.out.println(tf.withX("b"));
ObjectMapper om = new ObjectMapper().setAnnotationIntrospector(new JacksonLombokAnnotationIntrospector());
System.out.println(om.writeValueAsString(tf));
TestFoo tf2 = om.readValue(om.writeValueAsString(tf), TestFoo.class);
System.out.println(tf2);
}
}
সেগুলিই আমি জারগুলিকে ক্লাসপথে যুক্ত করছি:
লম্বোক: https://projectlombok.org/downloads/lombok.jar (সংস্করণ 1.16.10)
জ্যাকসন টীকা: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.8.2/jackson-annotations-2.8.2.jar
জ্যাকসন কোর: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.8.2/jackson-core-2.8.2.jar
জ্যাকসন ডাটাবাইন্ড: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.8.2/jackson-databind-2.8.2.jar
জ্যাকসন-লম্বোক: http://repo1.maven.org/maven2/io/paradoxical/jackson-lombok/1.1/jackson-lombok-1.1.jar
আমি এটি নেটবীনের সাথে সংকলন করছি (আমি মনে করি না এটি সত্যিই প্রাসঙ্গিক, তবে আমি এটিকে পুরোপুরি এবং বিশ্বস্তভাবে পুনরুত্পাদনযোগ্য করে তুলতে যাইহোক রিপোর্ট করছি)। উপরের পাঁচটি জেআর " lib
" src
"," nbproject
"," test
"এবং" build
" সহ" " প্রকল্পের ফোল্ডারের ভিতরে " " নামে একটি ফোল্ডারে রাখা হয়েছে । আমি তাদের প্রকল্পের বৈশিষ্ট্যগুলিতে " জেআর / ফোল্ডার যুক্ত করুন " বোতামের মাধ্যমে নেটবিনে যুক্ত করেছি এবং সেগুলি উপরের তালিকা হিসাবে সঠিক ক্রমে তালিকাভুক্ত। প্রকল্পটি একটি স্ট্যান্ডার্ড "জাভা অ্যাপ্লিকেশন" টাইপ প্রকল্প।
তদ্ব্যতীত, নেটবিয়ান প্রকল্পটি " সংরক্ষণে সংকলন করবেন না ", " ডিবাগিং তথ্য উত্পন্ন করা ", " প্রতিবেদক অবহেলিত এপিআই ", " ট্র্যাক জাভা নির্ভরতা ", " অ্যাক্টিভেট টীকা প্রোটেকশিং " এবং " সম্পাদকীয়টিতে অ্যাক্টিভেটে টিকা রচনা সংগ্রহ " কনফিগার করা হয়েছে । কোনও এনোটেশন প্রসেসর বা টিকা প্রক্রিয়াকরণ বিকল্পটি স্পষ্টভাবে নেটবিন্সে কনফিগার করা হয়নি। এছাড়াও, " -Xlint:all
" কমান্ড লাইন বিকল্পটি সংকলক কমান্ড লাইনে উত্তীর্ণ হয় এবং সংকলক বাহ্যিক ভিএম-তে চালিত হয়।
আমার জাভাকের সংস্করণটি 1.8.0_72 এবং আমার জাভার সংস্করণটি 1.8.0_72-বি 15। আমার নেটবিনস 8.1।
আমার প্রকল্প জরিমানা সংকলন। তবে এটি কার্যকর করার ক্ষেত্রে একটি ব্যতিক্রম ছুঁড়ে। ব্যতিক্রমটি এমন কিছু বলে মনে হয় না যা সহজে বা সুস্পষ্ট স্থিরযোগ্য বলে মনে হয়। এখানে স্ট্যাকট্রেস সহ আউটপুট দেওয়া হচ্ছে:
TestFoo(x=b, z=5)
{"z":5,"xoom":"a"}
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Argument #0 of constructor [constructor for testelombok.TestFoo, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[x, z]), interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
at [Source: {"z":5,"xoom":"a"}; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:296)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:269)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:475)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3890)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3785)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833)
at testelombok.TestLombok.main(TestLombok.java:14)
Caused by: java.lang.IllegalArgumentException: Argument #0 of constructor [constructor for testelombok.TestFoo, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[x, z]), interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerConstructors(BasicDeserializerFactory.java:511)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:323)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:253)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:219)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:141)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:406)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
... 7 more
আমি ইতিমধ্যে এলোমেলোভাবে পোষ্টগুলি @Value
এবং @AllArgsConstructor
টীকাগুলি সহ পোকার চেষ্টা করেছি , তবে আমি এর থেকে আরও ভাল করতে পারিনি।
আমি ব্যতিক্রমটি গুগল করলাম এবং জ্যাকসনের উপর একটি পুরানো বাগের প্রতিবেদন এবং অন্য একটি যা খোলা রয়েছে তা খুঁজে পেয়েছি তবে মনে হয় এটি অন্য কোনও কিছুর সাথে সম্পর্কিত । যাইহোক, এটি এখনও এই বাগটি কীভাবে বা এটি ঠিক করতে হবে সে সম্পর্কে কিছুই জানায় না। এছাড়াও, আমি অন্য কোথাও এমন দরকারী কিছু খুঁজে পাচ্ছিলাম না।
যেহেতু আমি যা করার চেষ্টা করছি তা লম্বোক এবং জ্যাকসন উভয়েরই মূল ব্যবহার, তাই এই বিষয়টিকে কীভাবে কার্যকরী করা যায় সে সম্পর্কে আমি আর কোনও দরকারী তথ্য খুঁজে পেলাম না বলে মনে হয় বিজোড় বলে মনে হচ্ছে। আমি কিছু মিস করেছি?
শুধু "বলার অপেক্ষা রাখে না ছাড়া Lombok ব্যবহার করবেন না " বা " Jackson ব্যবহার করবেন না ", কেহ এই সমাধান কিভাবে সম্পর্কে কোনো ধারণা আছে কি?