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


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.