春天不能接收邮递员发送的邮寄

时间:2017-08-02 08:08:12

标签: spring-boot http-post postman

enter image description here

我的控制器就像

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST,
        produces = {"application/json", "application/xml"})
@ResponseBody
public ResponseMessage deleteCompany(@RequestParam("companyId") Integer companyId) {
    return companyManageService.deleteCompany(companyId);
}

但是当我使用

在chrome控制台中键入代码时
$.post( "http://ltc_dev.leapstack.cn/gw/security/auth/company/delete", { companyId: 1 })
  .done(function( data ) {
    alert( data.success);
    alert( data.message);
  });

我得到了正确答案,所以...... 我不确定这是邮递员的错误,还是我错误地控制了控制器

1 个答案:

答案 0 :(得分:2)

在您的问题中,您的控制器方法尝试将 companyId 作为请求参数。在邮递员中,您在请求正文中发送companyId。就像我在评论中说的那样,您可以直接在url部分发送请求参数: / auth / company / delete?companyId = 2 。 Spring引导可以检测companyId请求参数并直接将其分配给方法的companyId变量。

如果您想在请求正文中发送companyId(您在评论中说过),您必须更改方法的签名,如下所示。

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, produces = {"application/json", "application/xml"})
@ResponseBody
public ResponseMessage deleteCompany(@RequestBody Map<String, Integer> map) {
    return companyManageService.deleteCompany(map.get("companyId"));
}

或者:

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, produces = {"application/json", "application/xml"})
@ResponseBody
public ResponseMessage deleteCompany(@RequestBody CompanyDTO company) {
    return companyManageService.deleteCompany(company.getCompanyId);
}

public class CompanyDTO {
    private Integer companyId;

//getter setter
}

如果你想使用请求体并希望直接在控制器方法的变量中捕获整数值作为整数,你的请求体应该是:

{2}

控制器方法应该是:

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, produces = {"application/json", "application/xml"})
@ResponseBody
public ResponseMessage deleteCompany(@RequestBody Integer companyId) {
    return companyManageService.deleteCompany(companyId);
}