Spring MVC 转发附加请求参数值,当我们对 topRequest 和转发请求具有相同的参数名称时,以逗号分隔



Spring MVC 转发附加请求参数值 当我们对 topRequest 和转发请求具有相同的参数名称时,逗号

@RequestMapping(path = "/details")
public ModelAndView details(@ModelAttribute final DetailsForm detailsForm){
  //DetailsForm contain a parameter called destinationId with value 1234
  final ModelAndView mav = new ModelAndView();
  //Some logic to get targeted destinationId (7890) using destinationId (1234) from detailForm
  mav.setViewName("forward:/search?destinationId=7890");
  return mav;
}
@RequestMapping(path = "/search")
    public ModelAndView details(@ModelAttribute final SearchForm searchForm){
  //Here I tried to get destinationId from model-attribute searchForm
  final Integer destinationId = searchForm.getDestinationId();
  //Then it returned me 1234,7890
}

有人可以帮我解决这个问题吗?我只想得到 7890。

我也对答案感兴趣。我也遇到了这个问题,通过添加一个方法来破解它:

private String getLastPartFromFormValue(final String value) {
    if (value == null)
        return null;
    String[] parts = value.split(",");
    return parts[parts.length -1];
}

只是为了知识。

如果你有一个方法,并且你有一个名为 thing 的查询参数,并且有一个用 @ModelAttribute 批注的对象,并且在该对象中你有一个与查询参数同名的字段,则可以预期这种行为。

例如:

    @PostMapping(value = "/my-awesome-path")
    public String myAwesomeMethod(
    @RequestParam(name = "token", required = false) final String token,
                @ModelAttribute("formData") final MyFormData formData) {
//class fields and members...

而且,在MyFormData中,您有以下内容:

public class MyFormData{
    private String token;
//other fields, getters and setters...

您将收到查询参数token,其中的值重复且逗号分隔,以及MyFormData对象。

另一种方法是检查随机性并更改参数名称或重新设计(如有必要(。

在示例中,查询参数名称更改如下:

    @PostMapping(value = "/my-awesome-path")
    public String myAwesomeMethod(
    @RequestParam(name = "custom-token", required = false) final String customToken,
                @ModelAttribute("formData") final MyFormData formData) {
//class fields and members...

并且这些值不会重复或逗号分隔。

干杯。

最新更新