Spring Framework, включите метод PUT - PullRequest
5 голосов
/ 02 апреля 2011

У меня проблема с захватом запроса PUT, отправленного на сервер.

Вот мои методы:

@RequestMapping(method= RequestMethod.GET)  
public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state,  Model model) {
    System.out.println("get request");  
    return "index";  
}


@RequestMapping(method= RequestMethod.PUT)  
public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) {
    System.out.println("put request");
    return "index";
}

Когда я отслеживал вызов, мой запрос PUT обрабатывался методом GET, а не методом PUT в моем классе ... на экране он всегда читался как "запрос на получение". Я проверил журнал браузера и подтвердил, что они отправили правильный запрос PUT, поэтому я думаю, что пропустил некоторую конфигурацию Spring здесь, но я не знаю, что это такое.

Может кто-нибудь помочь, пожалуйста?

Спасибо.

РЕДАКТИРОВАТЬ: Дополнительный код с классом:

@Controller
@RequestMapping(value="/retail/{cid}/master/city")
public class City {

    @RequestMapping(value="/foo1", method= RequestMethod.GET)  
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State")   Integer state,  Model model) {
        System.out.println("get request");  
        return "index";  
    }

    @RequestMapping(value="/foo2", method= RequestMethod.PUT)  
    public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) {
        System.out.println("put request");
        return "index";
    }
}

EDIT2: Извините, похоже, я не очень тщательно изучил журнал ... Я дважды понял это предупреждение.

WARNING: Error in annotation processing: java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

есть идеи как это исправить?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2011

Решено ... Это исправленный метод, который работает

@Controller
@RequestMapping(value="/retail/{cid}/master/city")
public class City {

  @RequestMapping(method= RequestMethod.GET)  
  public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) {
    System.out.println("get request");  
    return "index";  
  }

  @RequestMapping(method= RequestMethod.PUT)  
  public String putCity(@PathVariable(value="cid") String cid, @RequestBody CityData state, Model model) {
    System.out.println(state.getState());
    return "index";
  }
}
public class CityData {
  private String state;
  public String getState() {
    return this.state;
  }
  public void setState(String state) {
    this.state = state;
  }
}

Вы можете использовать @RequestBody String state, но я предпочитаю создавать объект CityData, потому что приведенный выше пример упрощает мойкод, только чтобы проверить, как обрабатывать данные

1 голос
/ 02 апреля 2011

Возможно, это связано с тем, что вы не указали значение сопоставления.Попробуйте @RequestMapping(value="/foo", ...GET) и @RequestMapping(value="/foo", ...PUT) соответственно

В документации написано:

Если у вас есть один метод по умолчанию (без явного сопоставления пути), то все запросы без более точного сопоставлениянайденный метод будет отправлен к нему.Если у вас есть несколько таких методов по умолчанию, то имя метода будет учитываться при выборе между ними.

Об ошибке - вам нужно добавить jar aopalliance к вашему classpath.

...