簡體   English   中英

RestController 中的請求映射

[英]Request mapping in RestController

在我的應用程序(springboot 2.+)中,我有一個 RestController

@RestController
@RequestMapping("/")
public class DeviceController {

   @GetMapping(value = "/devices") {
   public ResponseEntity<String> devices() {
    ...
   }
 }
}

現在,使用 URI 請求: /devices - 返回所有設備

但是使用 URI 請求: /devices?unknown_any_param=2 - 也返回所有設備

當我傳遞任何未知參數時,我怎樣才能做到這一點,這個方法devices()沒有調用,即返回錯誤“400 Bad request”?

我試圖指出像 @GetMapping(value = "/devices", params={}) 這樣的注釋,但它沒有幫助。

您可以獲取所有傳遞的參數,如下所示

public ResponseEntity<String> devices(
@RequestParam Map<String,String> requestParameters)

如果請求參數傳遞了有效的參數列表,現在檢查它們的鍵

return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

我相信您應該回復 404 'NOT FOUND',因為在 unknown_any_param=2 時沒有可用的設備。

如果你還想檢查——

您可以使用反射 API 來檢查密鑰是否有效。 考慮-

public class DeviceDto{
    private String knownValue;
    @JsonProperty("unknown_any_param")
    private String unknownValue;
}

情況1:如果參數與變量名相同。

DeviceDto.class.getDeclaredField("knownValue");

情況 2:如果 param 與 @JsonProperty 中的值相同並且您知道變量名稱

DeviceDto.class.getDeclaredField("unknownValue")
     .getAnnotation(JsonProperty.class)
     .value();

情況 2:如果 param 與 @JsonProperty 中的值相同並且您不知道變量名

Arrays.asList(DeviceDto.class.getDeclaredFields()).stream()
     .filter(r -> "unknown_any_param"
                       .equals(r.getAnnotation(JsonProperty.class).value()))
     .findFirst();

暫無
暫無

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

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