【问题标题】:spring can't receive post param send by postmanspring无法接收邮递员发送的post param
【发布时间】:2018-01-09 08:05:17
【问题描述】:

而我的控制器就像

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

我得到了正确的回应,所以...... 我不确定这是邮递员的错误,还是我配置控制器错误

【问题讨论】:

  • 您通过邮递员发送的不是 requestParam。它是请求体。如果您想将其作为请求参数发送,您的 url 应该是 /auth/company/delete?companyId=2
  • @barbakini 即使我将 #RequestParam 更改为 #RequestBody 它仍然无法正常工作,我尝试使用 #RequestBody 将 companyId 从 Integer 更改为 String 并获得值为 "companyId":2 而不是 2 !
  • 您是否尝试过 ** /auth/company/delete?companyId=2** ?如果更改 requestBody,您的方法应该得到一个 Map 对象,而不是 String 或 Integer。比如 deleteCompany(@RequestBody Map body) body.get("candidateId)
  • 我想用整数在 post 请求中接收一个 json 字符串
  • 您应该阅读一些关于什么是 json 字符串以及如何将其转换为 java 类型的内容。您问题中的 json 字符串是 {"companyId":2} 并且如您所见,它不能直接转换为整数(因为它是非数字字符串值)。您可以将它包装到一个具有属性 int companyId 的类中,spring 会自动将 cat 放入您的控制器方法中,或者就像我上面所说的,它可以转换为具有一个元素的地图,其 key 是 companyId,value 是 2。我会为您发布答案。

标签: spring-boot http-post postman


【解决方案1】:

在您的问题中,您的控制器方法尝试将 companyId 作为请求参数。在邮递员中,您在请求正文中发送 companyId。就像我在评论中所说的,您可以像这样直接在 url 部分发送请求参数:/auth/company/delete?companyId=2。 Spring Boot 可以检测到 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2021-07-13
    相关资源
    最近更新 更多