Я начал изучать Spring framework, и у меня проблемы с перенаправлением на страницы. Я использую чистый html, потому что я хочу, чтобы мой front-end был более независимым (в отличие от jsp). Я использую XML-конфигурации, который выглядит следующим образом:Spring html view response
<mvc:annotation-driven/>
<context:component-scan base-package="controllers"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value=""/>
<property name="suffix" value=".html"/>
</bean>
<mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources>
Некоторые основные контроллеры отлично работает, я могу перейти на страницу, если я использую метод GET (и тип браузера СТГ, как это: http://localhost:8080/mywebapp/home):
@Controller
@RequestMapping({"/", "/home"})
public class HomeController {
@RequestMapping(method=RequestMethod.GET)
public String goHome() {
System.out.println("HOME CONTROLLER");
return "resources/static/home"; // <-- name of the view (.html)
//return "home";
}
}
Однако, если я хочу перенаправить пользователя после того, как он использует регистрационную форму и метод отправки, я получаю пустую страницу с текстом: «resources/static/home».
контроллер выглядит следующим образом:
@Controller
@RequestMapping("/register")
public class RegisterController {
private static final Logger logger = Logger.getLogger(RegisterController.class);
@RequestMapping(method = RequestMethod.GET)
public String goRegister() { // this method works fine
return "resources/static/register";
}
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String doRegister(User user) { // this does not send user back to home page
logger.info("register new user request");
System.out.println(user.toString());
// TODO validation of user
return "resources/static/home";
}
}
класс пользователя правильно установлены значения из формы, но вместо того, чтобы перенаправлять обратно на главную страницу, я получаю пустой HTML с текстом. Я пытался использовать:
return "redirect:resources/static/home";
, но он также не работал.
Регистрация файла:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Register your account here.</h1>
<form method="POST">
Name: <input type="text" name="firstName" /><br>
Surname: <input type="text" name="surname" /><br>
e-mail: <input type="email" name="email" /><br>
Password: <input type="password" name="password" /><br>
Retype password: <input type="password" name="repassword" /><br>
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Я не могу понять логику этого. Почему метод GET способен возвращать представление, а POST - нет.
Edit: Я забыл упомянуть, что ранее, когда я использовал .jsp страниц, почти тот же код работал хорошо, и я, конечно, были разные XML-конфигурации и контроллеры только возвращаемые имя вида, например:
return "home";
Edit2: Это источник: https://github.com/robson021/InvoiceWriterFinal
После того, как я это сделал, я получил: «HTTP Status 405 - метод запроса« POST »не поддерживается» – Robson021
Должно работать, как вы сказали, работает, просто не создавая правильную страницу. Попробуйте '@RequestBody User user' –
Все еще не работает. – Robson021