3 回答
TA贡献1877条经验 获得超6个赞
不那么脏(据我所知)的方法是扩展请求:
public class WrappedHttpServletRequestWrapper extends HttpServletRequestWrapper
{
private final Map<String, String[]> modifiableParameters;
private Map<String, String[]> allParameters = null;
public WrappedHttpServletRequestWrapper (final HttpServletRequest request,
final Map<String, String[]> additionalParams)
{
super(request);
modifiableParameters = new TreeMap<String, String[]>();
modifiableParameters.putAll(additionalParams);
}
@Override
public Map<String, String[]> getParameterMap()
{
// allParameters contains old parameters + the ones you added
return Collections.unmodifiableMap(allParameters);
}
//... other overriden methods
}
并使用它来添加您的参数。这是参考。
以下是您将如何使用它:
Map<String, String[]> extraParams = new TreeMap<String, String[]>()
HttpServletRequest wrappedRequest = new WrappedHttpServletRequestWrapper(request, extraParams);
request.getRequestDispatcher("url").forward(wrappedRequest, response);
TA贡献1852条经验 获得超7个赞
Spring MVC 提供了一组强大的功能来自动为您解析和映射 HTTP 请求和响应,因此您不必手动执行,可以专注于业务逻辑。在这种情况下,Spring 可以为您提供所有请求参数的映射,如下所示:
@PostMapping("/abc") public void abc(@RequestParam Map<String, String> params) { ... }
(或者,如果您需要多值参数,您可以使用MultiValueMap
,它更符合标准,但使用起来更复杂)。你会得到一份地图的私人副本,实际上它是一个可变的LinkedHashMap
,但如果你不确定你总是可以直接说new HashMap<>(params)
.
一旦你有了这个params
地图,你可以添加任何你想要的附加值,但除非你可以在你自己的应用程序中将某人发送到另一个控制器,否则你需要生成一个redirect:
响应(在这种情况下,VIN 将在URL)或自己向其他服务发出 REST 请求,然后将信息转发回用户。
添加回答
举报