我有一些使用Spring MVC项目生成加密货币钱包的代码。
@RequestMapping(value = "/generateAddress", method = RequestMethod.POST)
public ResponseEntity<WalletInfoWrapper> generateAddress(@RequestParam("walletName") String walletName,
@RequestParam("currencyName") String currencyName, HttpServletRequest request) {
String wallet_Name = request.getParameter("walletName");
String currency_Name = request.getParameter("currencyname");
System.out.println("wallet_Name = " + wallet_Name + " , currency_Name = " + currency_Name);
// return if the wallet name or the currency is null
if (Objects.isNull(wallet_Name) || Objects.isNull(currency_Name)) {
return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE);
}
WalletInfo walletInfo = walletService.generateAddress(wallet_Name);
if (Objects.isNull(walletInfo)) {
return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE);
}
WalletInfoWrapper walletInfoWrapper = new WalletInfoWrapper();
walletInfoWrapper.setName(walletInfo.getName());
return new ResponseEntity<WalletInfoWrapper>(walletInfoWrapper, HttpStatus.CREATED);
}
现在,我发出此POST
请求,
curl -X POST -d "walletName=zyx¤cyName=bitcoin" http://localhost:8080/rest/generateAddress
我希望wallet_Name
和currency_Name
按照代码中的规定分开并打印。但是,在我发出POST
请求后,我在控制台中看不到任何内容。
String wallet_Name = request.getParameter("walletName");
String currency_Name = request.getParameter("currencyname");
System.out.println("wallet_Name = " + wallet_Name + " , currency_Name = " + currency_Name);
我还尝试POST
使用JSON
格式的数据,但我没有改变。这里的问题是什么?
答案 0 :(得分:6)
首先,我建议您切换使用System.out.println
并使用适当的记录器,例如slf4j
,因为您可能希望在某一点上将所有输出语句都放到文件。
关于如何使用spring mvc,有些不对。
由于您已经为两个字段声明了@RequestPAram
,为什么不直接使用它们而不是request.getPrameter("blah")
。因此,我建议您删除@RequestParam
并使用HttpServletRequest
,反之亦然。
我在这里看到的另一件事String currency_Name = request.getParameter("currencyname");
你犯了一个错误。你应该做request.getParameter("currencyName")
(观察N大写)。
以下是我的请求示例。我使用@RequestParam
并使用request.getParameter()
添加了两者。这是您想要使用的选择。现在的建议是使用@RequestParam
。
@RestController
public class WalletController {
private final Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value = "/generateAddress", method = RequestMethod.POST)
public ResponseEntity<String> generateAddress(@RequestParam("walletName") String walletName,
@RequestParam("currencyName") String currencyName, HttpServletRequest request) {
logger.info("walletName {} and currencyName {}", walletName, currencyName);
String wallet_Name = request.getParameter("walletName");
String currency_Name = request.getParameter("currencyName");
logger.info("walletName {} and currencyName {}", wallet_Name, currency_Name);
// DO other Stuff
return ResponseEntity.ok(null);
}
}
测试请求:
curl -X POST -d "walletName=my-cool-wallet¤cyName=ETH" http://localhost:8080/generateAddress
观看日志:
2017-08-14 10:11:29.972 INFO 29228 --- [nio-8080-exec-1] c.s.s.controller.WalletController : walletName my-cool-wallet and currencyName ETH
2017-08-14 10:11:29.972 INFO 29228 --- [nio-8080-exec-1] c.s.s.controller.WalletController : walletName my-cool-wallet and currencyName ETH
答案 1 :(得分:-2)
我认为您应该直接在URL中使用查询参数执行POST,如下所示,因为您尝试传递多个参数。
curl -X POST http://localhost:8080/rest/generateAddress?walletName=zyx¤cyName=bitcoin