Как связать запрос URL-шаблона с запросом Bean? - PullRequest
1 голос
/ 06 сентября 2011

У меня есть метод-обработчик для RESTful URL, например / jobtype / {jobType} / id / {jobId}, который мне нужно привязать к классу с именем JobType. Класс JobType содержит jobId и jobType.

Как я могу связать шаблон URI с классом JobType? Я пытался использовать @PathVariable, но он выбирает только JobType, а не id.

Как может webDataBinder помочь в этом сценарии? Я пытался использовать @initBinder для привязки класса JobType к редактору свойств, но он не работает.

//Request handler method code
@RequestMapping(value="/jobtype/{jobType}/id/{jobId}")
public ModelAndView fooViewWithDate(JobType jobType){
    ModelAndView mav = new ModelAndView("/admin/foo");
    mav.addObject("jobType", jobType);
    return mav;
}

@InitBinder
public void initBinder(WebDataBinder wdb){
    wdb.registerCustomEditor(JobType.class, new JobTypePropertyEditor());
}


public class JobTypePropertyEditor extends PropertyEditorSupport {  
@Override
public void setAsText(String text) throws IllegalArgumentException {
    JobType jobType = new JobType();
    jobType.setName(text);
    setValue(jobType);
}

}

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Как уже упоминалось в комментариях к моему предыдущему ответу, это может быть решением для вас.

@RequestMapping(value="/jobtype/{jobType}/id/{jobId}")
public ModelAndView fooViewWithDate(HttpServletRequest request) {
   LinkedHashMap map = (LinkedHashMap) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
   JobType jobType = new JobType(map);
   ModelAndView mav = new ModelAndView("/admin/foo");
   mav.addObject("jobType", jobType);
   return mav;
}
0 голосов
/ 07 сентября 2011

Я не уверен, что прекрасно понимаю ваш вопрос, но похоже, что JobType - это имя и идентификатор, поэтому вы должны указать это в @RequestMapping.Как это:

//Request handler method code
@RequestMapping(value="/jobtype/{jobType}/id/{jobId}")
   public ModelAndView fooViewWithDate(@PathVariable JobType jobType, 
                                       @PathVariable int jobId){
   jobType.setId(jobId);
   ModelAndView mav = new ModelAndView("/admin/foo");
   mav.addObject("jobType", jobType);
   return mav;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...