我可以在控制器级别添加请求参数并将其转发到另一个网站吗?

这个想法是,我收到了包含一些参数的 POST 请求,例如汽车名称和价格


我需要添加一些客户不应该知道的参数(例如,汽车的 VIN,客户在购买之前不应该知道)


然后,添加参数后,我想将此请求转发到另一个站点,其中包含我传递的所有数据(车名、价格、VIN)


有没有办法在控制器级别而不是过滤器上实现?


@RequestMapping(value = "/abc")

public void ABC(final HttpServletRequest request) {

     request.getParameterMap().put("vin", VIN_CODE); // cannot do that because it is read-only

     return "forward:https://completelyanothersite.com";

}

编辑:根据评论,转发不是解决方案,而是重定向是一个


慕桂英546537
浏览 166回答 3
3回答

慕哥9229398

不那么脏(据我所知)的方法是扩展请求:public class WrappedHttpServletRequestWrapper extends HttpServletRequestWrapper{&nbsp; &nbsp; private final Map<String, String[]> modifiableParameters;&nbsp; &nbsp; private Map<String, String[]> allParameters = null;&nbsp; &nbsp; public WrappedHttpServletRequestWrapper (final HttpServletRequest request,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final Map<String, String[]> additionalParams)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; super(request);&nbsp; &nbsp; &nbsp; &nbsp; modifiableParameters = new TreeMap<String, String[]>();&nbsp; &nbsp; &nbsp; &nbsp; modifiableParameters.putAll(additionalParams);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public Map<String, String[]> getParameterMap()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // allParameters contains old parameters + the ones you added&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return Collections.unmodifiableMap(allParameters);&nbsp; &nbsp; }&nbsp; &nbsp; //... other overriden methods}并使用它来添加您的参数。这是参考。以下是您将如何使用它:Map<String, String[]> extraParams = new TreeMap<String, String[]>()HttpServletRequest wrappedRequest = new WrappedHttpServletRequestWrapper(request, extraParams);request.getRequestDispatcher("url").forward(wrappedRequest, response);

慕姐4208626

Spring MVC 提供了一组强大的功能来自动为您解析和映射 HTTP 请求和响应,因此您不必手动执行,可以专注于业务逻辑。在这种情况下,Spring 可以为您提供所有请求参数的映射,如下所示:@PostMapping("/abc") public&nbsp;void&nbsp;abc(@RequestParam&nbsp;Map<String,&nbsp;String>&nbsp;params)&nbsp;{&nbsp;...&nbsp;}(或者,如果您需要多值参数,您可以使用MultiValueMap,它更符合标准,但使用起来更复杂)。你会得到一份地图的私人副本,实际上它是一个可变的LinkedHashMap,但如果你不确定你总是可以直接说new HashMap<>(params).一旦你有了这个params地图,你可以添加任何你想要的附加值,但除非你可以在你自己的应用程序中将某人发送到另一个控制器,否则你需要生成一个redirect:响应(在这种情况下,VIN 将在URL)或自己向其他服务发出 REST 请求,然后将信息转发回用户。

紫衣仙女

您可以将重定向发送到另一个网站,但不能将其转发到另一个网站。使用 resp.sendRedirect(url);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java