我有一些网址需要添加来自@ModelAttribute
的{{1}} @PathVariable
我需要将city值转换为bean,并在稍后的视图中使用它们;
现在我使用/{city}/**
创建并为@ControllerAdvise
添加@ModelAttribute
但有些网址不包含@RequestMapping
{city}
路径
当请求/
时,Spring抛出异常表明路径中没有/
{city}
可以排除建议某些网址如“/”,还是有其他方式没有@ControllerAdvise
来实现它?我试过了@ControllerAdvise
,但要解决它并不容易
编辑:
由于我的大部分网址都是HandlerInterceptor
,而且大多数/{city}/**
@RequestMapping
变量都不需要传递给服务,我只需将其转换并传递给视图。我不会看到我的大多数{city}
方法都带有@RequestMapping
参数,只需将其添加到City
和Model
。这很难看。
所以@Bhashit Parikh的帖子可能比@Ralph更能满足我的要求,我稍后会测试它。先谢谢大家!
答案 0 :(得分:3)
使用Converter<String, City>
将您的城市字符串转换为城市对象。
public class CityConverter implements Converter<String, City> {
@Override
public City convert(final String bidString) {
return ....
}
}
在FormattingConversionServiceFactoryBean
<bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converter">
<set>
<bean class="StingCityConverter" autowire="byType" />
</set>
</property>
</bean>
您可以在每个地方使用它,例如:
@RequestMapping("city/")
@Controller
public class Controller {
@RequestMapping(value = "/{cityId}", method = RequestMethod.GET)
public ModelAndView show(@PathVariable("cityId") City city) {
...
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView show() {
/* depends on what you want to do */
return this.show(null);
}
}
我希望这能回答您的问题,如果没有,请尝试重新提问您的问题,以便指明您的问题。
答案 1 :(得分:0)
我猜你正在使用@ModelAttribute
方法,如下所示:
@ModelAttribute("cityBean")
public City city(@PathVariable String city) {
return cityService.findByName(city);
}
您可以做的是,按以下方式更新上述方法:
@ModelAttribute("cityBean")
public City city(HttpServletRequest request) {
Map<String, String> pathVars = (Map<String, String>)request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
if(pathVars == null || !pathVars.contains("city")) {
// The path variable not present, do whatever you need here.
return null;
}
return cityService.findByName(city);
}