spring 可以通过 @RequestBody 以外的方式映射 POST 参数

Can spring map POST parameters by a way other than @RequestBody

我正在将 @RestControllers 与所有请求都是 POST 请求的应用程序一起使用...正如我从 this post 中了解到的那样,您无法映射个人 post 参数到各个方法参数,而是需要将所有参数包装在一个对象中,然后将此对象用作用 @RequestBody 注释的方法参数,因此

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestParam(value="idNumber") String idNumber , @RequestParam(value="applicationId") String applicationId) {
        return customerService.requestOTP(idNumber, applicationId);

不适用于正文 POST 请求 {"idNumber":"345","applicationId":"64536"}

我的问题是我有 很多POST 请求,每个请求只有一个或两个参数,创建所有这些对象会很乏味只是为了在里面接收请求...那么有没有其他类似于处理获取请求参数(URL参数)的方式?

我已经更改了您的代码,请检查

DTOClass

public class DTO1 {


private String idNumber;
private String applicationId;

public String getIdNumber() {
    return idNumber;
}

public void setIdNumber(String idNumber) {
    this.idNumber = idNumber;
}

public String getApplicationId() {
    return applicationId;
}

public void setApplicationId(String applicationId) {
    this.applicationId = applicationId;
}

}

休息控制器方法

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
public String requestOTP( @RequestBody DTO1 dto){
    System.out.println(dto.getApplicationId()+"  (------)  "+dto.getIdNumber());
    return "";
}

请求类型 -- application/json {"idNumber":"345","applicationId":"64536"}

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
public String requestOTP( @RequestBody String dto){
    System.out.println(dto);
    return "";
}

是的,有两种方法 -

首先 - 您需要做的就是将这些参数附加到 url,无需在正文中提供它们。 url 会像 - baseurl+/requestotp?idNumber=123&applicationId=123

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestParam(value="idNumber") String idNumber , @RequestParam(value="applicationId") String applicationId) {
        return customerService.requestOTP(idNumber, applicationId);

其次-您可以按如下方式使用地图

 @RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestBody Map<String,Object> body) {
        return customerService.requestOTP(body.get("idNumber").toString(), body.get("applicationId").toString());