Я пытаюсь заставить некоторые методы REST работать в моем приложении Spring, но, похоже, они не увенчались успехом. Я явно что-то упускаю, но я не могу сказать по жизни, что это будет. Вот мой контроллер:
@Controller
public class IndexController {
static Logger log = Logger.getLogger(IndexController.class);
@Autowired
private ProvisionService provisionService;
@RequestMapping(value="/home/data", method=RequestMethod.GET,
headers="Accept=application/json")
public @ResponseBody List<Provision> getData() {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String username = null;
if(principal instanceof UserDetails)
username = ((UserDetails)principal).getUsername();
return provisionService.getAllByUser(username);
}
//JSON put request - doesn't work currently
@RequestMapping(value="/home/data", method=RequestMethod.PUT,
headers="Content-Type=application/json")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateProvisions(@RequestBody List<Provision> provisions) {
log.info("Provisions: " + provisions.toString());
}
@RequestMapping(value={"/","/home"}, method=RequestMethod.GET)
public void showIndex() {}
}
Вот основная часть JSP, которая его использует:
<sf:form id="homeForm" method="put" action="${homeData_url}"></sf:form>
Форма отправляется через Javascript, когда пользователь нажимает кнопку. Во всяком случае, все работает нормально для GET. Я получаю Json с моим списком объектов, никаких проблем. Затем я показываю это с помощью Dojo и пока все хорошо. Тем не менее, когда я пытаюсь вернуть Json с этой формой, я получаю 405 - Запрос метода «POST» не поддерживается ошибка. Как вы можете видеть, у меня есть обработчик метода в моем контроллере, поэтому я действительно не уверен, что я делаю неправильно. Я взял этот обработчик из книги Spring in Action 3, и он также напоминает то, что говорят некоторые документы и материалы Spring, но, очевидно, я упускаю ключевой компонент. У кого-нибудь есть мысли?
У меня действительно есть HiddenHttpMethodFilter
, отображенный в моем файле web.xml, поэтому я использую тег формы Spring.
В любом случае, любые мысли или помощь приветствуются. Спасибо.
------------------ UPDATE ------------------
Вот заголовки после того, как я нажму на кнопку и получу ошибку 405, если это поможет:
http://localhost:8080/NFI/home
POST /NFI/home HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
DNT: 1
Connection: keep-alive
Referer: http://localhost:8080/NFI/home
Cookie: JSESSIONID=584AC21ADE4F214904B9E7E2370363EF
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
HTTP/1.1 405 Method Not Allowed
Server: Apache-Coyote/1.1
Allow: GET, PUT
Content-Type: text/html;charset=utf-8
Content-Length: 1085
Date: Fri, 21 Oct 2011 15:39:26 GMT