Как отобразить запрос «a-b» на объект команды в Spring MVC - PullRequest
3 голосов
/ 22 декабря 2009

Раньше я использовал "@RequestParam (" a-b ") String foo" для получения параметра "a-b" из http-запроса.

Теперь я хочу переключиться на Command Object, но не знаю, как получить этот параметр, я попробовал следующие 4 формы "ab", "aB", "a_b", "a_B", но ни одна из них не работает, например следующий код будет выглядеть как

URL: http://localhost:8080/test1?a-b=1
Результат: Foo{ab='null', aB='null', a_b='null', a_B='null'}

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

@Controller
public class TestController {

@RequestMapping("/test1")
public String test1(
    Foo foo,
    HttpServletResponse response
) throws IOException {
    response.setContentType("text/plain");
    response.getOutputStream().write(foo.toString().getBytes("UTF-8"));
    return null;
}


public static class Foo {

    private String ab;
    private String aB;
    private String a_b;
    private String a_B;

    // getter and setter
    ...

    @Override
    public String toString() {
        return "Foo{" +
                "ab='" + ab + '\'' +
                ", aB='" + aB + '\'' +
                ", a_b='" + a_b + '\'' +
                ", a_B='" + a_B + '\'' +
                '}';
    }
}





}

1 Ответ

1 голос
/ 22 декабря 2009

Я в замешательстве - вы явно используете параметр запроса a-b, но ожидаете, что он будет передан без дефиса или с дефисом, преобразованным в подчеркивание? Java не позволяет иметь поля классов с дефисами в их именах, и я не думаю, что Spring MVC имеет какой-либо волшебный способ преобразования дефисов в именах параметров запроса, поэтому я бы сказал, что вы можете просто не использовать параметры запроса с черточками в них, если вы собираетесь использовать этот метод передачи их в ваши контроллеры.

Если вы хотите, чтобы ваш параметр запроса назывался таким образом, тогда вы можете предоставить пользовательский WebBindingInitializer , как описано в разделе Настройка инициализации WebDataBinder руководства Spring. , который отображает параметр запроса a-b в соответствующее поле вашего класса Foo. Хотя теперь, когда я прочел это более подробно, WebBindingInitializer может не поддерживать объекты команд привязки ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...