@My1Name

Как вернуть ссылку с параметрами?

Контроллер:
@GetMapping("users/{id}")
public ModelAndView show(@RequestParam(value="id", required=false) String id){
if (id==null)
return new ModelAndView ("redirect:/");
........
return new ModelAndView ("users?id="+id);
}

Этот код работает неправильно... Что я делаю не так? Как бы я не пытался вернуть url в виде /users?id=id, в лучшем случае получаю ошибку ServletContext с префиксом id.html или страницу 404 с неправильным урлом.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
@My1Name Автор вопроса
Может кому-то поможет:
@GetMapping("users/**")
public String show(@RequestParam(value="id", required=false) String id){
if (id==null)
return "/";
........
return "users";
}

Я искал решение, чтоб отображать "красивую ссылку", типа users/1234 или такую, которую пользователь мог бы выбрать сам (вместо 1234).

Чтоб сформировать "красивую ссылку", url нужно получать с HttpServletRequest, и в таком случае параметры @RequestParam не нужны.
@GetMapping("/publisher/**")
	public String publisher(HttpServletRequest req, Principal principal, Model model){
		String id = req.getRequestURL().toString();
		id = id.substring(id.indexOf("/publisher")+10); // "/publisher" == 10
		if (id.startsWith("/"))
			id=id.substring(1);
		if (principal==null && id.isBlank()) {
			return "redirect:/";
		}
		else {
			id = urlModelByOwner(principal, model, id);
		}
		if(!id.isBlank())
		return "redirect:publisher"+id;
	return "publisher";
	}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xez
@xez
TL Junior Roo
ModelAndView принимает строку viewName. Если у вас нет вью для каждого id, то оно, конечно же, будет выводить ошибку.
Возможно, вам следует добавить к ModelAndView атрибут; руководствуйтесь документацией, приведенной выше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы