আমি কি বসন্তে একটি @ ভ্যালুর জন্য ডিফল্ট মান হিসাবে নাল সেট করতে পারি?


105

আমি বর্তমানে @ ভ্যালু স্প্রিংয়ের ৩.১.x টীকাগুলি এর মতো ব্যবহার করছি:

@Value("${stuff.value:}")
private String value;

বৈশিষ্ট্যটি উপস্থিত না থাকলে এটি ভেরিয়েবলের মধ্যে একটি খালি স্ট্রিং রাখে। আমি একটি খালি স্ট্রিংয়ের পরিবর্তে ডিফল্ট হিসাবে নাল রাখতে চাই। সম্পত্তি সম্পত্তি.মূল্য সেট না করা অবস্থায় অবশ্যই আমি একটি ত্রুটি এড়াতে চাই।

উত্তর:


67

আপনাকে অবশ্যই প্রপার্টিপ্লেসহোল্ডার কনফিগারার নালভ্যালু সেট করতে হবে । উদাহরণস্বরূপ আমি স্ট্রিংটি ব্যবহার করছি @nullতবে আপনি শূন্য স্ট্রিংটি নালভ্যালু হিসাবেও ব্যবহার করতে পারেন।

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <!-- config the location(s) of the properties file(s) here -->
    <property name="nullValue" value="@null" />
</bean>

এখন আপনি মানটি @nullউপস্থাপন করতে স্ট্রিংটি ব্যবহার করতে পারেনnull

@Value("${stuff.value:@null}")
private String value;

দয়া করে নোট করুন: প্রসঙ্গের নামের স্থানটি এই মুহুর্তে নাল মানটিকে সমর্থন করে না। আপনি ব্যবহার করতে পারবেন না

<context:property-placeholder null-value="@null" ... />

বসন্ত ৩.১.১ এর সাথে পরীক্ষিত


4
জাভা কনফিগারেশন এর সমতুল্য কি?
কুমার সংভাব

31
stackoverflow.com/questions/9347929/... $ ব্যবহার উল্লেখ {some.param: # {নাল}}, এবং যে আমার জন্য nullValue সেট না করেও কাজ করেন, মনে হচ্ছে এই ডিফল্ট? (একটি স্প্রিং বুট অ্যাপ্লিকেশনে))
ভোরবার্গার

5
ফটো $ সরল ব্যবহার ক্ষমতা {stuff.value: # {নাল}} হিসাবে vorburger দ্বারা এবং প্রস্তাবিত stackoverflow.com/questions/16735141/...
সিএসএফ

বেন 3000 এবং জে রিচার্ডস উত্তরগুলির জন্য কম কনফিগারেশন প্রয়োজন বলে মনে হচ্ছে।
জেফ

207

এটি সত্যিই পুরানো, তবে আপনি এখন স্প্রিং ইল ব্যবহার করতে পারেন, যেমন

@Value("${stuff.value:#{null}}")

এই প্রশ্নটি দেখুন ।


56

@ ফোরবার্গারকে ধন্যবাদ:

@Value("${email.protocol:#{null}}")
String protocol;

এ স্ট্রিং মান সেট হবে নাল অন্য কোন কনফিগারেশনের ছাড়া।


4
গত 2019 সংস্করণে বসন্ত-বুটে কাজ করেছেন: 2.1.7.RELEASE ... start.spring.io
JRichardsz

2

আমি @ নোজব্রাইনকে ক্রেডিট দিচ্ছি কারণ আমি "নাল-মান" সম্পর্কে জানতাম না তবে আমি নাল মানগুলি সম্পূর্ণরূপে ব্যবহার করা এড়াতে পছন্দ করি কারণ বিশেষত nullকোনও সম্পত্তি ফাইলটিতে প্রতিনিধিত্ব করা তার পক্ষে কঠিন ।

তবে এখানে নাল আউট ব্যবহারের বিকল্প রয়েছে null-valueযাতে এটি যে কোনও সম্পত্তি প্লেসোল্ডারের সাথে কাজ করবে।

public class MyObject {

   private String value;

   @Value("${stuff.value:@null}")
   public void setValue(String value) {
      if ("@null".equals(value)) this.value = null;
      else this.value = value;
   }
}

ব্যক্তিগতভাবে আমি আমার পথটিকে পছন্দ করি কারণ পরে সম্ভবত আপনি stuff.valueএকটি কমা-বিচ্ছিন্ন-মান হতে চান বা এনুমের পক্ষে সুইচটি সহজ। এটি ইউনিট পরীক্ষা করাও সহজ :)

সম্পাদনা: এনাম ব্যবহারের বিষয়ে আপনার মন্তব্য এবং নাল ব্যবহার না করার বিষয়ে আমার মতামতের ভিত্তিতে।

@Component
public class MyObject {

    @Value("${crap:NOTSET}")
    private Crap crap;

    public enum Crap {
        NOTSET,
        BLAH;
    }
}

উপরেরটি আমার পক্ষে কাজ করে। আপনি নাল এড়ানো। যদি আপনার সম্পত্তি ফাইলগুলি সুস্পষ্টভাবে সেট করতে চায় যে তারা এটি পরিচালনা করতে চায় না তবে আপনি করুন ( তবে আপনাকে এটি নির্দিষ্ট করতে হবে না কারণ এটি নোটসেটের ডিফল্ট হবে )।

crap=NOTSET

nullখুব খারাপ এবং এর চেয়ে আলাদা NOTSET। এর অর্থ বসন্ত বা ইউনিট পরীক্ষা সেট করে দেয়নি তাই আইএমএইচও পার্থক্য রয়েছে। আমি সম্ভবত সম্ভবত সেটার নোটেশনটি ব্যবহার করব (পূর্ববর্তী উদাহরণ) ইউনিট পরীক্ষায় তার সহজ হিসাবে (ব্যক্তিগত ভেরিয়েবলগুলি ইউনিট পরীক্ষায় সেট করা শক্ত)।


স্ট্রিংয়ের মান একটি উদাহরণ ছিল, এনাম মানের জন্য আমার সত্যিই এটি দরকার ছিল, যেখানে খালি স্ট্রিংয়ের ফলে রূপান্তর ত্রুটি হয়। @ নুলের সাহায্যে আপনার "নো এনাম সেট" হিসাবে নাল থাকতে পারে, যা আমার প্রয়োজন।
কেভিন শ্মিট

আরও সমস্ত কারণে কেন আমি নালাকে সুপারিশ করব না তবে এর পরিবর্তে এমন কিছু এনাম সেট করে যা সেট করে না।
অ্যাডাম জেন্ট

4
এর জন্য এনাম.এন.এস.টি.এস.টি সমস্ত প্রোপার্টি ফাইলগুলিতে (> 30) লাগানো দরকার যা প্রায় কোনও সুবিধা ছাড়াই অনেক কাজ বলে মনে হচ্ছে ...
কেভিন শ্মিত

আমি এটি চেষ্টা করে দেখিনি তবে তাত্ত্বিকভাবে @Value("${stuff.value:NOTSET}")কাজ করবে না ?
অ্যাডাম জেন্ট

হ্যাঁ, এটি একটি ভাল সমাধান। দুর্ভাগ্যক্রমে আমি এনাম (ডিপ) পরিবর্তন করতে পারি না, তাই আমাকে নালার সাথে যেতে হবে। অন্যথায় আপনি ঠিক বলেছেন, নোটটি কাজ করবে।
কেভিন শ্মিড্ট

0

আপনার যদি খালি (0 দৈর্ঘ্যের) স্ট্রিংটি "" ভ্যালু ডিফল্ট হিসাবে ইনজেক্ট করতে হয় - তবে স্পেল (স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ) নিম্নলিখিত হিসাবে ব্যবহার করুন:

@Value("${index.suffix:#{''}}") 
private String indexSuffix;

# {''} কেবলমাত্র ইনজেকশনের @ ভ্যালুর ডিফল্ট হিসাবে আপনাকে একটি খালি স্ট্রিং দেয়।

yl দ্বারা

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