Spring, метод запроса "POST" не поддерживается
Прежде всего, извиняюсь, чтобы задать этот повторный вопрос.
На самом деле в моем приложении spring у меня есть user.jsp
и professional.jsp
вот мой User.jsp:
<form:form action="profile/user" modelAttribute="profile">
<div>
<jsp:include page="professional.jsp"></jsp:include>
</div>
</form:form>
И вот мой профессионал .jsp:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<fieldset id="profile_proffiesional">
<form:form action="profile/proffiesional" modelAttribute="PROFESSIONAL" method="POST">
<p>
<label for="position">Position</label>
<form:input path="position" tabindex="4" />
</p>
<p>
<label for="location">Location</label>
<form:input path="location" tabindex="5" />
</p>
<p>
<label for="description">Description</label>
<form:input path="description" tabindex="5" />
</p>
<p>
<input type="submit" value="Add">
</p>
</form:form>
</fieldset>
И вот мой класс контроллера:
@Controller
@RequestMapping(value = "profile")
public class UserProfileController {
@Autowired
private UserService userService;
@Autowired
private SessionData sessionData;
@RequestMapping(value = "user", method = RequestMethod.GET)
public String user(Model model) throws Exception {
model.addAttribute("PROFESSIONAL", new UserProfessionalForm());
model.addAttribute("EDUCATIONAL", new UserEducationalForm());
model.addAttribute("AWARDS", new UserAwardsForm());
return "profile/user";
}
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
}
}
Problem
- это когда мы нажимаем кнопку Add
в professional.jsp
, на консоли сервера нет ответа, но ниже отображается предупреждающее сообщение:
29 Mar, 2013 1:03:51 PM org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported
Зачем это предупреждение? Я уже указал метод = "POST"..
Пожалуйста, помогите..
Ответы
Ответ 1
Ваш user.jsp:
<form:form action="profile/proffesional" modelAttribute="PROFESSIONAL">
---
---
</form:form>
В классе контроллера:
(сделайте это как значение полного имени метода..Hear, я думаю, что вы вставляете запись в БД.)
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String proffessionalDetails(
@ModelAttribute UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("PROFESSIONAL", professionalForm);
return "Your Professional Details Updated";
}
Ответ 2
В Jsp:
action="profile/proffiesional"
В контроллере
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
Орфография MisMatch!
Ответ 3
У меня был csrf включен в моем xr файле безопасности sprint, поэтому я просто добавил одну строку в форму:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
Таким образом, я смог отправить форму с атрибутом model
.
Ответ 4
Вы пропустите комментарий @ModelAttribute
для параметра UserProfessionalForm professionalForm
в методе forgotPassword
.
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
}
Ответ 5
Попробуйте это
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute("PROFESSIONAL") UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
}
Ответ 6
Для информации я удалил атрибут действия, и я получил эту ошибку, когда я вызываю сообщение ajax. Даже если мой атрибут действия в форме выглядит как action="javascript://;"
Мне показалось, что я получил это от вызова ajax и сериализую форму, но добавил фиктивный атрибут действия в форму обратно и работал.