@artemfisher

Как обратиться в методе контролера к объекту запроса?

Добрый день.

В методе контролера @InitBinder делаю привязку параметров запроса к объекту:

@InitBinder("product")
	public void initBinder(WebDataBinder binder, HttpServletRequest request) throws ServletException, IOException
	{			
		if(!request.getRequestURI().contains("/product/saveproduct")) return;
		
		//Product product = new Product();
		//binder = new WebDataBinder(product);
		
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		BigDecimal price = BigDecimal.valueOf(Double.parseDouble(request.getParameter("price")));
		String description = request.getParameter("description");
		int ownerId = Integer.parseInt(request.getParameter("owner"));
		Catalog owner = repo.getCatalog(ownerId);	
		
		
		List<byte[]> images = new ArrayList<>();
		for(Part part : request.getParts())
		{
			images.add(part.getInputStream().readAllBytes());
		}
				
		String str = binder.getTarget().toString() + " " + id + name + " " + price + " " + description + " " + ownerId;
		
		
		MutablePropertyValues props = new MutablePropertyValues();
		
		props.addPropertyValue("id", id);
		props.addPropertyValue("name", name);
		props.addPropertyValue("price", price);
		props.addPropertyValue("description", description);
		props.addPropertyValue("images", Optional.ofNullable(images));
		props.addPropertyValue("owner", owner);		
		
		binder.bind(props);	
	}


Класс объекта в Java
public class Product {
	
	private int id;
	private String name;	
	private BigDecimal price;
	private String description;
	private Optional<List<byte []>>images  = Optional.ofNullable(null);
	private Optional <Catalog> owner = Optional.ofNullable(null);

       //getters and setters
}


Как мне теперь обратиться к этому объекту в параметре метода контролера?

так не работает:
public String saveProduct(Product product)
{
  .....
}


с использованием @RequestAttribute("product"), @ModelAttribute("product") тоже.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
@My1Name
Как мне теперь обратиться к этому объекту в параметре метода контролера?

Я не знаю что это за @InitBinder но я также не увидел, чтоб вы где-то создали объект "Product". Если WebDataBinder считается объектом, то вы его преобразовали в строку String str = binder.getTarget().toString()+ Далее вы создали MutablePropertyValues, что эквивалентно Map <String, String> или <String, Object> Короче говоря: вы нигде не создали объект Product чтоб к нему обращаться.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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