дизайн кода весной MVC контроллер - PullRequest
1 голос
/ 21 января 2011

Привет, хочу задать вопрос о дизайне в Spring MVC Controller. URL запроса будет иметь несколько параметров, например. тип = v1 & v2 = par2 & Par3 = v3 & Par4 = v4. Среди 4 параметров «тип» будет определять режим транзакции, а другие параметры будут входными для каждой транзакции.

Как вы организуете код контроллера? Традиционно вы можете написать что-то вроде следующего:

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 - это закрытые методы в контроллере.

Просто интересно, есть ли лучший способ написать код здесь?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 21 января 2011

Вы должны создать один метод обработки запроса для каждого "типа". Каждый из этих методов нуждается в аннотации @ RequestMapping .

Аннотация RequestMapping предоставляет атрибут с именем params:

abstract String [] 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() {
     ...
  }
}
1 голос
/ 21 января 2011

Обратите внимание на использование аннотации @ RequestMapping , чтобы разделить ваши три метода режима на методы публичного запроса. Например:

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

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

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

Вам необходимо изменить URL-адреса на / type / 1 / ... и т. Д., Но тогда вы сможете получить доступ к другим переменным в качестве аргументов метода. Прочитайте всю страницу MVC в документации Spring для других идей. Удачи!

0 голосов
/ 22 января 2011

Я считаю это хорошим примером использования перечисления:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...