@ রিকোয়েস্টপ্রাম বনাম @ পাথ ভার্যিয়েবল


353

বিশেষ চরিত্রগুলি পরিচালনা করার মধ্যে @RequestParamএবং এর মধ্যে পার্থক্য কী @PathVariable?

+@RequestParamস্থান হিসাবে গ্রহণ করা হয়েছিল ।

ক্ষেত্রে @PathVariable, +হিসাবে গৃহীত হয়েছিল +

উত্তর:


497

যদি http://localhost:8080/MyApp/user/1234/invoices?date=12-05-20135 ই ডিসেম্বর, 2013- এ ইউআরএল 1234 ব্যবহারকারীর জন্য চালান পেয়ে থাকে, তবে কন্ট্রোলার পদ্ধতিটি দেখতে পাবেন:

@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
            @PathVariable("userId") int user,
            @RequestParam(value = "date", required = false) Date dateOrNull) {
  ...
}

এছাড়াও, অনুরোধের প্যারামিটারগুলি alচ্ছিক হতে পারে এবং স্প্রিংয়ের ৪.৩.৩ পাথ ভেরিয়েবলগুলিও optionচ্ছিক হতে পারে । যদিও সাবধান থাকুন, এটি ইউআরএল পথের স্তরক্রম পরিবর্তন করতে পারে এবং অনুরোধ ম্যাপিং বিরোধগুলি প্রবর্তন করতে পারে। উদাহরণস্বরূপ, /user/invoicesব্যবহারকারীর জন্য চালান nullবা আইডি "ইনভয়েস" ব্যবহারকারীর সম্পর্কে বিশদ সরবরাহ করবে?


11
@PathVariableযে কোনও রিকোয়েস্টমেথ
কুরাই বাঁকসু

1
@ অ্যালেক্সো: জাভা 8 এর সাথে এর কোনও যোগসূত্র নেই, এটি জাভা 5 এবং স্প্রিং 3.0 এর জন্যও কাজ করে: মূল বিষয়টি হ'ল কোডটি ডিবাগিং সক্ষমের সাথে সংকলিত।
রাল্ফ

2
@ রাল্ফ সঠিক, এটি জাভা ৮ এর পূর্বে ডিবাগিংয়ের সাথে কাজ করে Java যেহেতু জাভা 8 এটি ডিবাগিং ছাড়াই কাজ করে, পরিবর্তে "-paraters" ব্যবহার করে: ডকস.স্প্রিং.আইও / স্প্রিং
প্রতিবিম্ব

1
@ ব্যবহারকারী3705478: আমি এটি মনে করি না, কারণ বসন্তের জানা উচিত এটি একটি অনুরোধ হ্যান্ডলার পদ্ধতি। (এবং অবশ্যই: @PathParam ইউরি টেমপ্লেটে কোনও স্থানধারক থাকলে কেবল কাজ করে)
রাল্ফ

2
@ ব্যবহারকারী3705478: @PathParamএকটি জাভ্যাক্স.উজ.আরস টিকা। docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.html
রাল্ফ

112

অনুরোধ থেকে ক্যোয়ারী প্যারামিটার মানগুলিতে অ্যাক্সেসের জন্য ব্যবহৃত @RequestParam টিকা। নিম্নলিখিত অনুরোধ URL দেখুন:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

উপরের ইউআরএল অনুরোধে, প্যারাম 1 এবং প্যারাম 2 এর মানগুলি নীচের হিসাবে অ্যাক্সেস করা যেতে পারে:

public String getDetails(
    @RequestParam(value="param1", required=true) String param1,
        @RequestParam(value="param2", required=false) String param2){
...
}

নীচে @ রিকোয়েস্টপ্রাম টিকা দ্বারা সমর্থিত প্যারামিটারগুলির তালিকা রয়েছে:

  • ডিফল্টভ্যালু - যদি অনুরোধের মান না থাকে বা এটি খালি থাকে তবে এটি ফ্যালব্যাক প্রক্রিয়া হিসাবে ডিফল্ট মান।
  • নাম - আবদ্ধ করার জন্য প্যারামিটারের নাম
  • প্রয়োজনীয় - প্যারামিটারটি বাধ্যতামূলক কিনা। যদি এটি সত্য হয় তবে সেই পরামিতিটি প্রেরণ করতে ব্যর্থ হবে।
  • মান - এটি নামের অ্যাট্রিবিউটের জন্য একটি উপাধি

@PathVariable

@ প্যাথ ভেরিয়েবল আসন্ন অনুরোধের জন্য ইউআরআইতে ব্যবহৃত প্যাটার্নটি সনাক্ত করে। নীচের অনুরোধ URL টি দেখুন:

HTTP: // স্থানীয় হোস্ট: 8080 / springmvc / হ্যালো / 101 PARAM1 = 10 & PARAM2 = 20

উপরের ইউআরএল অনুরোধটি আপনার স্প্রিং এমভিসিতে নীচে লেখা যেতে পারে:

@RequestMapping("/hello/{id}")    public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

অনুরোধ ইউআরআই টেমপ্লেটটি আবদ্ধ করার জন্য @ প্যাথ ভ্যারিয়েবল টিকাতে কেবল একটি বৈশিষ্ট্যযুক্ত মান রয়েছে। এটি একক পদ্ধতিতে একাধিক @ পথের পরিবর্তনযোগ্য টিকাটি ব্যবহারের অনুমতিপ্রাপ্ত । তবে, নিশ্চিত করুন যে একের বেশি কোনও পদ্ধতির একই ধরণ নেই।

এছাড়াও আরও একটি আকর্ষণীয় টিকা আছে: @ ম্যাট্রিক্স ভেরিয়েবল

HTTP: // স্থানীয় হোস্ট: 8080 / spring_3_2 / matrixvars / স্টক; BT.A = 276,70 + 10.40 + 3.91; AZN = 236,00 + 103,00 + 3.29; SBRY = 375,50 + 7.60 + 2.07

এবং এটির জন্য কন্ট্রোলার পদ্ধতি

 @RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
  public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {

    logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });

    List<List<String>> outlist = map2List(matrixVars);
    model.addAttribute("stocks", outlist);

    return "stocks";
  }

তবে আপনাকে অবশ্যই সক্ষম করতে হবে:

<mvc:annotation-driven enableMatrixVariables="true" >

একটি স্ট্রিং যেমন userNameএকটি টাইপ পরম আছে বা না? আমি এটিকে পরিবর্তনশীল করার দিকে ঝুঁকছি, তবে এটিও পরম হতে পারে।
cst1992

1
..আর এখানে আসল পোস্টটি রয়েছে: - jababeat.net/spring-mvc-requestparam-pathvariable
মেহরাজ মালিক

@PathParamএবং @RequestParamব্যবহার না করে ঘোষণা করা যেতে পারে@RequestMapping
সোফেস 1

29

@ রেকুয়েস্টপ্যারাম কোয়েরি প্যারামিটারের (স্ট্যাটিক মান) এর মতো ব্যবহার করা হয়: http: // লোকালহস্ট: 8080 / গণনা / পাও? বেস = 2 এবং এক্সট = 4

@ পাঠ্য ভেরিয়েবলটি গতিশীল মানের জন্য যেমন: HTTP: // লোকালহোস্ট: 8080 / গণনা / স্কয়ার্ট / 8

@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
    int pow = (int) Math.pow(base1, ext1);
    return pow;
}

@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
    double sqrtnum=Math.sqrt(num1);
    return sqrtnum;
}

সহজ এবং পরিষ্কার @alok
আনন্দ কৃষ

12

1) ক্যোয়ারী প্যারামিটারগুলি@RequestParam নিষ্কাশন করতে ব্যবহৃত হয়

http://localhost:3000/api/group/test?id=4

@GetMapping("/group/test")
public ResponseEntity<?> test(@RequestParam Long id) {
    System.out.println("This is test");
    return ResponseEntity.ok().body(id);
}

যখন @PathVariableকোনো URI থেকে নির্যাস তথ্য ডানদিকে ব্যবহার করা হয়:

http://localhost:3000/api/group/test/4

@GetMapping("/group/test/{id}")
public ResponseEntity<?> test(@PathVariable Long id) {
    System.out.println("This is test");
    return ResponseEntity.ok().body(id);
}

2) @RequestParamএকটি traditionalতিহ্যবাহী ওয়েব অ্যাপ্লিকেশনটিতে আরও দরকারী যেখানে ডেটা বেশিরভাগ ক্যোয়ারি প্যারামিটারগুলিতে পাস করা হয় এবং @PathVariableআরএসটিফুল ওয়েব পরিষেবাদির জন্য আরও উপযুক্ত যেখানে URL এর মান রয়েছে values

3) @RequestParamএনটোটেশন ডিফল্ট মানগুলি নির্দিষ্ট করতে পারে যদি কোনও defaultValueবৈশিষ্ট্য ব্যবহার করে কোনও কোয়েরি প্যারামিটার উপস্থিত বা খালি না থাকে তবে শর্ত থাকে প্রয়োজনীয় বৈশিষ্ট্যটি false:

@RestController
@RequestMapping("/home")
public class IndexController {

    @RequestMapping(value = "/name")
    String getName(@RequestParam(value = "person", defaultValue = "John") String personName) {
        return "Required element of request param";
    }

}

1
@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request
@RequestParam - must be passed as method parameter (optional based on the required property)
 http://localhost:8080/employee/call/7865467

 @RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
 public List<Calls> getAgentCallById(
            @PathVariable(“callId") int callId,
            @RequestParam(value = status", required = false) String callStatus) {

    }

http://localhost:8080/app/call/7865467?status=Cancelled

@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
            @PathVariable(“callId") int callId,
            @RequestParam(value = status", required = true) String callStatus) {

}

1

টীকাগুলি উভয়ই ঠিক একইভাবে আচরণ করে।

মাত্র দুটি বিশেষ চরিত্র '!' এবং '@' টীকাগুলি @ পাথ ভার্ভেয়েবল এবং @ রিকোয়েস্টপ্রাম দ্বারা স্বীকৃত।

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

 @RestController 
public class Controller 
{
    @GetMapping("/pvar/{pdata}")
    public @ResponseBody String testPathVariable(@PathVariable(name="pdata") String pathdata)
    {
        return pathdata;
    }

    @GetMapping("/rpvar")
    public @ResponseBody String testRequestParam(@RequestParam("param") String paramdata)
    {
        return paramdata;
    }
}

নিম্নলিখিত অনুরোধগুলি হিট করা আমার একই প্রতিক্রিয়া পেয়েছি:

  1. ! স্থানীয় হোস্ট: 7000 / pvar / @ # $% ^ & * (): _ - = [] {} |; ': ", / <>।?
  2. ! স্থানীয় হোস্ট: 7000 / rpvar PARAM = @ # $% ^ & * (): _ - = [] {} |; ': ", / <>।?

! @ উভয় অনুরোধের প্রতিক্রিয়া হিসাবে প্রাপ্ত হয়েছিল


0

এও হতে পারে যে আবেদন / এক্স-WWW-ফর্ম-urlencoded করতে মিডিয়া শেষ করে দিয়েছে টাইপ রূপান্তর স্থান + + , এবং গ্রাহক রূপান্তর দ্বারা ডেটা ডিকোড হবে + + আরও তথ্যের জন্য URL space.check করতে। http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

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