亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在控制器級別添加請求參數并將其轉發到另一個網站嗎?

我可以在控制器級別添加請求參數并將其轉發到另一個網站嗎?

慕桂英546537 2022-07-27 11:29:31
這個想法是,我收到了包含一些參數的 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";}編輯:根據評論,轉發不是解決方案,而是重定向是一個
查看完整描述

3 回答

?
慕哥9229398

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);


查看完整回答
反對 回復 2022-07-27
?
慕姐4208626

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 請求,然后將信息轉發回用戶。


查看完整回答
反對 回復 2022-07-27
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

您可以將重定向發送到另一個網站,但不能將其轉發到另一個網站。使用 resp.sendRedirect(url);



查看完整回答
反對 回復 2022-07-27
  • 3 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號