2011-01-21 69 views
1

嗨,只是想問一個在Spring MVC控制器的設計問題。 請求URL將有多個參數,例如。 type = v1 & par2 = v2 & par3 = v3 & par4 = v4。在4個參數中,「類型」將決定交易模式,其他參數將作爲每筆交易的輸入。代碼設計在春天mvc控制器

如何組織控制器代碼? 傳統上,你可能會寫一些像下面,

if (type.equals('1')) 
{ 
    callMode1(par2,par3, par4); 
} 
else if (type.equals('2') 
{ 
    callMode2(par2, par3, par4); 
} 
else if (type.equals('3')) 
{ 
    callMode3(par2, par3, par4); 
} 

callMode1 - callMode2是在控制器的私有方法。

想知道是否有更好的方法在這裏寫代碼?

在此先感謝!

+0

你是什麼意思'交易模式'。你想通過http參數改變tx隔離嗎? – AngerClown 2011-01-21 02:52:47

回答

3

您應該爲每個「類型」創建一個請求處理方法。每種方法都需要@RequestMapping註釋。

的RequestMapping註解提供稱爲params一個屬性:

抽象字符串[] PARAMS

映射請求的參數, 縮小主映射。用於任何環境

相同格式:「myParam = myvalue的」風格 表達式的 序列,具有請求僅 如果每個這樣的參數被發現 到具有給定的值進行映射。可以通過使用「!=」 運算符來否定表達式 ,如在「myParam!= myValue」中一樣。 「myParam」風格表達式也支持 ,此類參數 將出現在請求中(允許 有任何值)。最後, 「!myParam」樣式表達式指示 指定的參數不是 應該出現在請求中。

然後你就可以用這種方式實現:

@Controller 
@RequestMapping(what ever you have in common) 
class Handler { 

    @RequestMapping(params={"type=1"}) 
    public void mode1() { 
    ... 
    } 

    @RequestMapping(params={"type=2"}) 
    public void mode2() { 
    ... 
    } 
} 
+0

謝謝你的工作。在這裏沒有定義的其他場景如何?即。 'type'是一個意想不到的值? – Koolala 2011-01-23 23:02:39

1

查看使用@RequestMapping註釋將三種模式方法分離爲公共請求方法。例如:

@RequestMapping(value="/type/1") 
public void mode1() { 
    ... 
} 

@RequestMapping(value="/type/2") 
public void mode2() { 
    ... 
} 

@RequestMapping(value="/type/3") 
public void mode3() { 
    ... 
} 

你需要改變你的網址/類型/ 1/...等,但那麼你就可以能夠訪問你的其他變量的方法參數。在Spring文檔中閱讀整個MVC頁面以獲取其他想法。祝你好運!

0

我覺得這是一個很好的使用情況的枚舉:

public enum Type { 
    T1 { 
     @Override 
     public void call(String par1, String par2, String par3) { 
      callMode1(par1, par2, par3); 
     } 
    }, 
    T2 { 
     @Override 
     public void call(String par1, String par2, String par3) { 
      callMode2(par1, par2, par3); 
     } 
    }, 
    T3 { 
     @Override 
     public void call(String par1, String par2, String par3) { 
      callMode3(par1, par2, par3); 
     } 
    }, 

    public abstract void call(String par1, String par2, String par3); 

    public static Type valueOfNumber(String number) { 
     return valueOf("T" + number); 
    } 

} 

然後,控制器將只是獲得相應的鍵入並調用呼叫:

Type t = Type.valueOfNumber(type); 
t.call(par1, par2, par3);