簡體   English   中英

@RequestParameter是否僅與GetMapping和PostMapping一起使用?

[英]Does @RequestParameter only work with GetMapping and PostMapping?

我有這些映射:

@GetMapping("rparam")
public void get(@RequestParam("test") String test) {
    System.out.println(test);
}

@PostMapping("rparam")
public void post(@RequestParam("test") String test) {
    System.out.println(test);
}

@PatchMapping("rparam")
public void patch(@RequestParam("test") String test) {
    System.out.println(test);
}

@DeleteMapping("rparam")
public void delete(@RequestParam("test") String test) {
    System.out.println(test);
}

@PutMapping("rparam")
public void put(@RequestParam("test") String test) {
    System.out.println(test);
}

除了GetMapping和PostMapping方法之外,其他所有方法均因400 Bad請求失敗而失敗,因為它們找不到測試參數。

編輯:如何提出要求(后一作品):

(對數據進行字符串化並添加contentType:application / json也無濟於事)

$.ajax({
    url: "api/my-controller/rparam",
    method: "POST",
    data: {
        test: "super test"
    },
    headers: {
        "X-XSRF-TOKEN": cookie
    }
}).done(function() {
    console.log("super cool")
});

$.ajax({
    url: "api/my-controller/rparam",
    method: "PUT",
    data: {
        test: "super test"
    },
    headers: {
        "X-XSRF-TOKEN": cookie
    }
}).done(function() {
    console.log("super cool")
});

編輯:我只是注意到,當我不對數據進行字符串化並設置contentType時,它將作為表單數據發送。 通過表單發送數據僅支持發布和獲取,所以這可能與它有關?

嘗試通過更改方法來提供一些默認值:

public void delete(@RequestParam(value = "test" , defaultValue = "default") String test)

@RequestParam可以與所有類型的@RequestMapping一起使用

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

但是,關於語義,應該假設PATCH,PUT和DELETE接受請求的主體,然后在URI標識的資源上更新/存儲/刪除對象。

所以,我建議使用@RequestBody而不是@RequestParam

您可以看一下這個非常相似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM