স্প্রিং এমভিসি কন্ট্রোলারের কাছে জিইটি অনুরোধে কীভাবে ডেট প্যারামগুলি গ্রহণ করবেন?


122

আমার কাছে একটি অনুরোধ আছে যা YYYY-MM-DD ফর্ম্যাটে একটি তারিখ একটি স্প্রিং কন্ট্রোলারে প্রেরণ করে। নিয়ামক কোডটি নিম্নরূপ:

@RequestMapping(value="/fetch" , method=RequestMethod.GET)
    public @ResponseBody String fetchResult(@RequestParam("from") Date fromDate) {
        //Content goes here
    }

আমি ফায়ারব্যাগের সাথে চেক করছিলাম বলে অনুরোধটি সঠিকভাবে পাঠানো হয়েছে। আমি ত্রুটি পেয়েছি:

HTTP স্থিতি 400: ক্লায়েন্টের দ্বারা প্রেরিত অনুরোধটি সিনট্যাক্টিক্যালি ভুল ছিল।

আমি কীভাবে নিয়ামককে তারিখের এই ফর্ম্যাটটি গ্রহণ করতে পারি? সাহায্য করুন. আমি কি ভুল করছি?

উত্তর:


250

ঠিক আছে, আমি এটি সমাধান করেছি। এমন কোনও ব্যক্তির জন্য এটি লেখা, যিনি পুরো দিনের অবিরাম কোডিংয়ের পরে ক্লান্ত হয়ে পড়েছেন এবং এরকম মূর্খ জিনিসটি মিস করছেন।

@RequestMapping(value="/fetch" , method=RequestMethod.GET)
    public @ResponseBody String fetchResult(@RequestParam("from") @DateTimeFormat(pattern="yyyy-MM-dd") Date fromDate) {
        //Content goes here
    }

হ্যাঁ, এটা সহজ। কেবল ডেটটাইমফর্ম্যাট টীকা যুক্ত করুন।


18
আমি একটি উত্তর লিখতে যাচ্ছিলাম তবে আপনি আমাকে মারধর করেছেন। আপনি @ তারিখটাইমফর্ম্যাট (আইসো = আইএসও.ডিআউট )ও ব্যবহার করতে পারেন যা একই ফর্ম্যাট। বিটিডাব্লু, আপনি যদি বলতে পারেন যে আপনি জোদা ডেটটাইম লাইব্রেরিটি ব্যবহার করুন। বসন্ত এটি সত্যিই ভাল সমর্থন করে।
লুসিয়ানো

উত্তরটি ঠিক আছে, তবে! এটিকে বসন্তের ডিফল্ট হিসাবে কনফিগার করার কোনও উপায় আছে কি? @DateTimeFormatআপনার প্রতিটি কন্ট্রোলারে রাখা সামান্য কিছুটা ওভারকিল ...
Thorinkor

3
@ লুসিয়ানো অবশ্যই আপনি @ তারিখটাইমফোর্ম্যাট (আইসো = আইএসও.ড্যাটালটাইম) করতে পারেন
কিডিস্কটোস

2
@ থিরিঙ্কর স্প্রিং বুটে আপনি spring.mvc.date-formatবৈশিষ্ট্যটি সেট করতে পারেন application.propertiesবা মটরশুটি যোগ করতে পারেন যা org.springframework.formatইন্টারফেসটি বাস্তবায়িত করে (প্রসারিত org.springframework.format.datetime.DateFormatterসম্ভবত সম্ভবত যাওয়ার উপায়)। অ বুট বসন্তে আপনি পারেন পদ্ধতি এবং আপনার ফরম্যাটার-বাস্তবায়ন সেখানে মটরশুটি যোগ করুন। @OverrideaddFormattersWebMvcConfigurerAdapter
ইউটিএফ_অর_দিঘ

10

সামনের প্রান্ত থেকে ফর্ম্যাট করা তারিখটি পেতে আমি এটিই করেছি

  @RequestMapping(value = "/{dateString}", method = RequestMethod.GET)
  @ResponseBody
  public HttpStatus getSomething(@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String dateString) {
   return OK;
  }

আপনি যা চান তা পেতে আপনি এটি ব্যবহার করতে পারেন।


11
পেল না। আপনি যদি তারিখ হিসাবে স্ট্রিং হিসাবে ডেটস্ট্রিং পান তবে তারিখ হিসাবে স্ট্রিং হিসাবে ডেটটাইমফর্ম্যাটটি @ প্যাথভেরিয়েবলের সাথে যোগ করার কী বিষয়?
ILya ঘূর্ণিঝড়

7

... বা আপনি এটি সঠিক উপায়ে করতে পারেন এবং আপনার অ্যাপ্লিকেশন জুড়ে তারিখগুলি সিরিয়ালাইজেশন / ডিসেরায়ালাইজেশন করার জন্য একটি সুসংগত নিয়ম থাকতে পারে। এটিকে প্রয়োগ করুন rop

spring.mvc.date-format=yyyy-MM-dd

3

সমাধান নীচে পুরোপুরি বসন্ত বুট অ্যাপ্লিকেশন জন্য কাজ করে।

নিয়ন্ত্রক:

@GetMapping("user/getAllInactiveUsers")
List<User> getAllInactiveUsers(@RequestParam("date") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date dateTime) {
    return userRepository.getAllInactiveUsers(dateTime);
}

সুতরাং কলারে (আমার ক্ষেত্রে এটি একটি ওয়েব ফ্লাক্স), আমাদের এই ( "yYYY-MM-dd HH: mm: ss" ) ফর্ম্যাটে তারিখের সময়টি পার করতে হবে ।

কলার সাইড:

public Flux<UserDto> getAllInactiveUsers(String dateTime) {
    Flux<UserDto> userDto = RegistryDBService.getDbWebClient(dbServiceUrl).get()
            .uri("/user/getAllInactiveUsers?date={dateTime}", dateTime).retrieve()
            .bodyToFlux(User.class).map(UserDto::of);
    return userDto;
}

সংগ্রহস্থলের প্রয়োগ:

@Query("SELECT u from User u  where u.validLoginDate < ?1 AND u.invalidLoginDate < ?1 and u.status!='LOCKED'")
List<User> getAllInactiveUsers(Date dateTime);

চিয়ার্স !!


2

আপনি যদি কোনও প্যাথ-ভেরিয়েবল ব্যবহার করতে চান তবে আপনি নীচের উদাহরণ পদ্ধতিটি ব্যবহার করতে পারেন (সমস্ত পদ্ধতি হ'ল এবং একইভাবে করুন):

//You can consume the path .../users/added-since1/2019-04-25
@GetMapping("/users/added-since1/{since}")
public String userAddedSince1(@PathVariable("since") @DateTimeFormat(pattern = "yyyy-MM-dd") Date since) {
    return "Date: " + since.toString(); //The output is "Date: Thu Apr 25 00:00:00 COT 2019"
}

//You can consume the path .../users/added-since2/2019-04-25
@RequestMapping("/users/added-since2/{since}")
public String userAddedSince2(@PathVariable("since") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date since) {
    return "Date: " + since.toString(); //The output is "Date: Wed Apr 24 19:00:00 COT 2019"
}

//You can consume the path .../users/added-since3/2019-04-25
@RequestMapping("/users/added-since3/{since}")
public String userAddedSince3(@PathVariable("since") @DateTimeFormat(pattern = "yyyy-MM-dd") Date since) {
    return "Date: " + since.toString(); //The output is "Date: Thu Apr 25 00:00:00 COT 2019"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.