spring 可以通过@RequestBody以外的方式弹出MapPOST参数

5kgi1eie  于 2022-11-21  发布在  Spring
关注(0)|答案(2)|浏览(130)

我在一个所有请求都是POST请求的应用程序中使用了@RestController ......正如我从this post中学到的,您不能将单个post参数Map到单个方法参数,而是需要将所有参数 Package 在一个对象中,然后将该对象用作用@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);

将无法处理主体{"idNumber":"345","applicationId":"64536"}POST请求
我的问题是,我有大量POST请求,每个请求只有一个或两个参数,创建所有这些对象只是为了接收其中的请求将是乏味的...所以,有没有其他类似于获取请求参数(URL参数)的处理方式?

csga3l58

csga3l581#

有两种方法-
首先,您所做的只是将这些参数与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);

第二,您可以按如下方式使用Map

@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());
zd287kbt

zd287kbt2#

我已经修改了你的代码,请检查一下

DTO类别

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;
}

}
Rest控制器方法

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

请求类型--应用程序/json {“标识号”:“345”,“应用程序ID”:“64536”}

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

相关问题