Java Spring Controller处理一个荒谬的url



好吧,我正在使用一个名为Thrive cart的支付服务,我正在为我正在创建的会员网站做这件事。当用户付款后,我希望他们被重定向到一个URL,在那里我可以使用这些数据来更新当前用户的信息。

在参数中发送的数据是疯狂的:

http://localhost:5000/user/welcome?thrivecart%5Baccount_id%5D=3196&繁荣购物车%5帐户名称%5D=测试计数&繁荣车%5客户%5D%5电子邮件%5D=testname8%40gmail.com&繁荣车%5客户%5D%5地址%5D%5国家%5D=GB&繁荣购物车%5客户%5D%5地址%5D%5Zip%5D=pe303wu&繁荣购物车%5订单%5D%5B0%5D%5Bt%5D=产品&繁荣购物车%5订单%5D%5B0%5D%5Bid%5D=6&繁荣购物车%5订单%5D%5B0%5D%5Bn%5D=每月+会员资格&繁荣车%5订单%5D%5B0%5D%5Bp%5D=799&繁荣购物车%5订单%5D%5B0%5D%5Bq%5D=1&繁荣购物车%5订单%5D%5B0%5D%5Po%5D=60120&繁荣购物车%5订单%5D%5B1%5D%5Bt%5D=产品&繁荣购物车%5订单%5D%5B1%5D%5Bid%5D=6&繁荣购物车%5订单%5D%5B1%5D%5Bn%5D=每月+会员资格&繁荣购物车%5Border%5D%5B1%5D%5Bp%5D=799&繁荣购物车%5订单%5D%5B1%5D%5Bq%5D=1&繁荣购物车%5订单%5D%5B1%5D%5Po%5D=60120&繁荣购物车%5订单_货币%5D=GBP&繁荣购物车%5Order_id%5D=1041278&繁荣购物车%5Order_tax%5D=0.2&繁荣购物车%5Order_tax_id%5D=gb&繁荣购物车%5订单总额%5D=799&繁荣购物车%5Payment_processor%5D=贝宝&繁荣购物车%5Bproduct_id%5D=6&繁荣购物车%5购买%5D%5B0%5D=6&繁荣购物车%5购买%5D%5B1%5D=6&growtycart_hash=a5b711d2288b4cb587511811bc0a3473

到目前为止,我已经设置了一个不会被击中的简单控制器:

@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/welcome", method = RequestMethod.POST)
public void welcomeMember(@PathVariable String data) {
System.out.println(data);
}   
}

我该如何处理这样疯狂的数据?我必须指定每个路径参数吗?

首先,您得到的似乎不是路径元素,而是请求参数,因此您需要@RequestParam注释来获得值。

由于请求参数太多,我还建议只使用一个参数,即Map<String, String>。该Map将包含作为键/值对的所有参数,例如:

  • 键:"繁荣车[account_id]">
  • 值:"3196">

如果您不确定是否收到POST或GET请求,也可以添加第二个参数来接收HttpMethod

将RestController更改为:

@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/welcome")
public void welcomeMember(@RequestParam Map<String, String> data, HttpMethod method) {
System.out.println(method);
System.out.println(data);
}   
}

这看起来像是如何从服务使用者端调用rest api的问题。

尝试将数据发送到请求正文中,而不是作为参数发送。通过这种方式,您可以使用POJO来处理数据。

问题1:到目前为止,我已经设置了一个不会被击中的简单控制器:

根据您的URLhttp://localhost:5000/user/welcome"user"似乎是您的项目上下文名称。尝试从您的类中删除@RequestMapping("/user")

此外,使用@RequestParam Map<String,String> params代替@PathVariable String data。当数据是url的一部分时使用@PathVariable String data,但在您的情况下它是参数。最终代码应如下所示。

@RestController
public class UserController {
@RequestMapping(value = "/welcome", method = RequestMethod.POST)
public void welcomeMember(@RequestParam Map<String,String> params ) {
for(Map.Entry<String, String> entry : params.entrySet()){
//This will print all paramters name and their value
System.out.println(entry.getKey() + "-" + entry.getValue());
}
}   
}

问题2:如何处理这样疯狂的数据?我必须指定每个路径参数吗

我建议遵循标准做法。以json格式发送数据。有不同的方法,这取决于您使用的前端技术。一种方法是链接

最新更新