আমি জ্যাকসনে কীভাবে ব্যর্থ_আপনি_পেনটি অক্ষম করব?


104

জ্যাকসন ২.১ ব্যবহার করে, fail_on_empty beansত্রুটি বার্তাটি আমাকে অক্ষম করতে চায় বলে আমি কীভাবে অক্ষম করব?

আমি ধরে নিচ্ছি যে এটি বিশ্বের সহজতম জিনিস, তবে জাহান্নাম দেরী হয়ে গেছে এবং আমি এর থেকে একটি সাধারণ টিউটোরিয়াল বা বিশেষভাবে স্পষ্ট কিছু খুঁজে পাচ্ছি না apiSerializationFactory? কেন তারা এটিকে এতটা অনিশ্চিত করে এবং তারপরে ত্রুটির বার্তাটি এত সোজা বলে মনে হচ্ছে?

যদিও আমি কি করতে ত্রুটি বার্তা মত, আমি বলতে চাচ্ছি, এটা ভাল একটি NPE চেয়ে।

আমি ধরে নিচ্ছি টীকাগুলি ব্যবহার করে এটি করার একটি উপায় আছে - তবে আমি যে সরলতামূলক কাজটি করছি তার জন্য এগুলি মোটেও ব্যবহার করতে আগ্রহী নই!

উত্তর:


128

আপনি প্রতি ক্লাসে বা বিশ্বব্যাপী এটি করতে পারেন, আমি বিশ্বাস করি।

প্রতি ক্লাসের জন্য, ক্লাস ঘোষণার উপরের উপরের @ জসনসরিশালাইজ চেষ্টা করুন।

ম্যাপারের জন্য, এখানে একটি উদাহরণ দেওয়া হয়েছে:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// do various things, perhaps:
String someJsonString = mapper.writeValueAsString(someClassInstance);
SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)

নীচের স্ট্যাকওভারফ্লো লিঙ্কটিতে একটি বসন্ত প্রকল্পের উদাহরণ রয়েছে।

জার্সির সাথে বিশ্রামের জন্য, আমি আমার মাথা থেকে উপরেটি মনে করি না তবে আমি বিশ্বাস করি এটি একই রকম।


বেশ কয়েকটি লিঙ্ক আমি খনন করেছি: (কোডহাউস বন্ধ হওয়ার কারণে প্রথম লিঙ্ক সম্পাদিত)।


আমি আজকে এটি আগে ব্যবহার করেছি, আরও কিছু তথ্য রয়েছে, যেমন অটো আবিষ্কার। stackoverflow.com/questions/4362104/...
Pancakeo

4
শ্রেণীর ঘোষণায় @JsonSerializeঅক্ষম করতে কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণ দিতে পারেন FAIL_ON_EMPTY_BEANS?
টুক করুন

4
কয়েক বছর হয়েছে :)। এই শক্তি সহায়তা: stackoverflow.com/questions/12162413/...
Pancakeo

অথবা আপনি "ম্যাপার.ডিজিয়েবল (সিরিয়ালাইজেশন ফিচার। এফআইএলিটিকো_এমপিটিওয়াই_বিয়ানস)" এর মতো অবজেক্টম্যাপার ক্লাসের অক্ষম পদ্ধতিটি ব্যবহার করতে পারেন
আর পিডুগু

47

আপনি যদি স্প্রিং বুট ব্যবহার করে থাকেন তবে আপনি নীচের বৈশিষ্ট্যটি অ্যাপ্লিকেশন.প্রেটিস ফাইলে সেট করতে পারেন। বসন্ত.জ্যাকসন.সিরিয়ালাইজেশন FAএফআইএইচিউল_এমপিটিওয়াই_বিইএনস = মিথ্যা


হ্যাঁ এটি সমাধান।
ওজনুগওয়া জুড ওচালিফু

22

আপনার ক্লাসে কোনও পাবলিক পদ্ধতি / বৈশিষ্ট্য না থাকলে আপনিও একই সমস্যা পেতে পারেন। আমি সাধারণত এপিআই অনুরোধ এবং প্রতিক্রিয়াগুলির জন্য ডিটিও উত্সর্গ করেছি, সর্বজনীন ঘোষিত হয়েছি, তবে পদ্ধতিগুলিও সর্বজনীন করতে এক ক্ষেত্রে ভুলে গিয়েছি - যার ফলে "খালি" শিমটি প্রথম স্থানে রয়েছে।


13

ক্লাসে অপরিজ্ঞাত @JsonIgnoreProperties(ignoreUnknown=true)ক্ষেত্রগুলিকে অগ্রাহ্য করার জন্য আপনি সম্ভবত ক্লাসটি বর্নিত করতে পারেন


4
পুরো
শিমটি

12

আপনি যদি কোনও অতিরিক্ত ক্ষেত্র ছাড়াই JSON অবজেক্ট পেতে চান - দয়া করে আপনার ক্লাসে এই টিকাটি যুক্ত করুন, এটি আমার জন্য নিখুঁতভাবে কাজ করেছে।

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

আপনি এই অ্যাপ্লিকেশনটিতেও যুক্ত করতে পারেন rop ব্যক্তিগতভাবে এই সারিটি ফাইল করুন তবে এটি আপনার জেএসএনে একটি অতিরিক্ত ক্ষেত্র যুক্ত করবে।

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

আমি আমার বসন্ত-বুট REST অ্যাপ্লিকেশনটিতে আমার একজন নিয়ন্ত্রণকারীর ভিতরে থেকে JSON ফেরত দেওয়ার চেষ্টা করছিলাম এবং এটি আমার জন্য এটি ঠিক করে।
নিনজাসনেসে

আপনার যদি খালি অবজেক্ট থাকে তবে সঠিক উপায়!
জর্জি পিভ

3

আপনি যদি org.codehaus.jackson.map.ObjectMapper ব্যবহার করেন তবে প্লিজ। নিম্নলিখিত লাইন ব্যবহার করুন

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

3

জার্সি রেস্ট সার্ভিসে কেবল জ্যাকসন ফিচারস টীকাটি ব্যবহার করুন ...

@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
    Object entity = doSomething();
    return Response.ok(entity).build();
}

1

আমার ক্ষেত্রে, আমি একটি ক্ষেত্রের মধ্যে @ jsonProperty টীকা লিখতে মিস করেছি যা এই ত্রুটি ঘটাচ্ছে।


1

ভিন্ন সমস্যার জন্য এখানে একটি সমাধান যুক্ত করা হচ্ছে, তবে একই ত্রুটির সাথে উদ্ভাসিত একটি ... আপনার স্ট্রিংয়ের সদস্যদের মধ্যে আক্ষরিক ডাবল উদ্ধৃতিগুলি এড়াতে ফ্লাইতে জাসন নির্মাণ করার সময় (এপিআই প্রতিক্রিয়া বা যা কিছু হোক) যত্ন নিন Take আপনি নিজের ক্ষতিকারক জসন ব্যবহার করছেন।


1

এই সমস্যাটি ঠিক করুন নীচের মত আপনার জসোনডাটা ফর্ম্যাট ক্লাসটি কনফিগার করুন

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

যা প্রায় সমান,

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

0
ObjectMapper mapper = new ObjectMapper();

ওহে,

আমি যখন ব্যবহার করি mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)

আমার জসন বস্তুর মানগুলি প্রতিক্রিয়ার মধ্য দিয়ে কৌনিক পৃষ্ঠায় ফাঁকা আসে come

মীমাংসিত শুধুমাত্র সেটিংস নিচে সাহায্যে

mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

0

আমার ক্ষেত্রে আমার এটি নিষ্ক্রিয় করার দরকার নেই, বরং আমাকে এই কোডটি আমার ক্লাসের উপরে রাখতে হয়েছিল: (এবং এটি আমার সমস্যার সমাধান করেছে)

    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)//this is what was added
    @Value //this was there already
    @Builder//this was there already

public class NameOfClass {
     //some code in here.
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.