[java] تمرير متغيرات متعددة فيRequestBody إلى وحدة تحكم Spring MVC باستخدام Ajax



Answers

في حين أنه من الصحيح أن @RequestBody يجب أن يقوم @RequestBody لكائن واحد ، فإن هذا الكائن يمكن أن يكون عبارة عن Map ، لذا فإن هذا يجعلك طريقة جيدة لما تحاول تحقيقه (لا داعي لكتابة كائن دعم واحد):

@RequestMapping(value = "/Test", method = RequestMethod.POST)
@ResponseBody
public boolean getTest(@RequestBody Map<String, String> json) {
   //json.get("str1") == "test one"
}

يمكنك أيضًا ربط ObjectNode جاكسون إذا كنت تريد إنشاء شجرة JSON كاملة:

public boolean getTest(@RequestBody ObjectNode json) {
   //json.get("str1").asText() == "test one"
Question

هل من الضروري الالتفاف في كائن دعم؟ اريد فعل هذا:

@RequestMapping(value = "/Test", method = RequestMethod.POST)
@ResponseBody
public boolean getTest(@RequestBody String str1, @RequestBody String str2) {}

واستخدم JSON مثل هذا:

{
    "str1": "test one",
    "str2": "two test"
}

لكن بدلاً من ذلك ، يجب عليّ استخدام:

@RequestMapping(value = "/Test", method = RequestMethod.POST)
@ResponseBody
public boolean getTest(@RequestBody Holder holder) {}

ثم استخدم JSON هذا:

{
    "holder": {
        "str1": "test one",
        "str2": "two test"
    }
}

هل هذا صحيح؟ سيكون الخيار الخاص بي الأخرى في تغيير RequestMethod إلى GET واستخدام @RequestParam في سلسلة الاستعلام أو استخدام @PathVariable مع RequestMethod .




@RequestParam هي @RequestParam HTTP GET أو POST المرسلة من قبل العميل ، ورسم الخرائط هو جزء من عنوان URL المتغير:

http:/host/form_edit?param1=val1&param2=val2

var1 و var2 هي params طلب.

http:/host/form/{params}

{params} عبارة عن تعيين طلب. يمكنك الاتصال Pathvariable مثل: http:/host/form/user أو http:/host/form/firm حيث يتم استخدام الشركة والمستخدم كـ Pathvariable .




توجد معلمة الطلب لكل من GET و POST ، للحصول على أنه سيتم إلحاقها كسلسلة استعلام إلى URL ولكن لـ POST تكون ضمن طلب نص




لست متأكدا من مكان إضافة json ولكن إذا كنت تفعل ذلك مثل هذا مع الزاوي فإنه يعمل دون requestBody: angluar:

    const params: HttpParams = new HttpParams().set('str1','val1').set('str2', ;val2;);
    return this.http.post<any>( this.urlMatch,  params , { observe: 'response' } );

جافا:

@PostMapping(URL_MATCH)
public ResponseEntity<Void> match(Long str1, Long str2) {
  log.debug("found: {} and {}", str1, str2);
}



Related