Spring - URI映射问题

时间:2015-05-25 08:11:51

标签: java spring

我的应用程序出现映射错误,非常感谢任何帮助! =)

错误消息:在名为“springapp”的DispatcherServlet中找不到带有URI [/springapp/priceincrease.htm]的HTTP请求的映射

您可以在下面找到一些代码:

PriceIncreaseFormController.java

@Controller
@RequestMapping(value="/priceincrease.htm")
public class PriceIncreaseFormController {

/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());

@Autowired
private ProductManager productManager;

@RequestMapping(method = RequestMethod.POST)
public String onSubmit(@Valid PriceIncrease priceIncrease, BindingResult result)
{
    if (result.hasErrors()) {
        return "priceincrease";
    }

    int increase = priceIncrease.getPercentage();
    logger.info("Increasing prices by " + increase + "%.");

    productManager.increasePrice(increase);

    return "redirect:/hello.htm";
}

@RequestMapping(method = RequestMethod.GET)
protected PriceIncrease formBackingObject(HttpServletRequest request) throws ServletException {
    PriceIncrease priceIncrease = new PriceIncrease();
    priceIncrease.setPercentage(15);
    return priceIncrease;
}

public void setProductManager(ProductManager productManager) {
    this.productManager = productManager;
}

public ProductManager getProductManager() {
    return productManager;
}

}

应用-config.xml中     

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">


   <bean id="productManager" class="com.companyname.springapp.service.SimpleProductManager">
     <property name="products">
        <list>
            <ref bean="product1"/>
            <ref bean="product2"/>
            <ref bean="product3"/>
        </list>
     </property>
   </bean>


   <bean id="product1" class="com.companyname.springapp.domain.Product">
     <property name="description" value="Lamp"/>
     <property name="price" value="5.75"/>
   </bean>

   <bean id="product2" class="com.companyname.springapp.domain.Product">
     <property name="description" value="Table"/>
     <property name="price" value="75.25"/>
   </bean>

   <bean id="product3" class="com.companyname.springapp.domain.Product">
     <property name="description" value="Chair"/>
     <property name="price" value="22.79"/>
   </bean>


   <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
     <property name="basename" value="messages"/>
   </bean>

   <!-- Scans the classpath of this application for @Components to deploy as beans -->
   <context:component-scan base-package="com.companyname.springapp.web" />

   <!-- Configures the @Controller programming model -->
   <mvc:annotation-driven/>

   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
     <property name="prefix" value="/WEB-INF/views/"></property>
     <property name="suffix" value=".jsp"></property>        
   </bean>

</beans>

的web.xml     

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name>Springapp</display-name>

  <servlet>
    <servlet-name>springapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/app-config.xml</param-value>
    </init-param>
   <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

</web-app>

2 个答案:

答案 0 :(得分:0)

您忘记在应用程序上下文中添加处理程序映射:

<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

答案 1 :(得分:0)

您的GET方法存在问题:formBackingObject。 取决于您的要求,它应该返回查看或使其成为REST方法。

案例1:返回视图(JSP,HTML,XSLT ......)

@RequestMapping(value="/priceincrease.htm",method = RequestMethod.GET)
protected String formBackingObject(HttpServletRequest request,Model model) throws ServletException {
      PriceIncrease priceIncrease = new PriceIncrease();
      priceIncrease.setPercentage(15);
      model.addAttribute("priceIncrease",priceIncrease);
      return "view_name";
}

案例2:使用@ResponseBody的REST方法(必须使用jackson.core Jar)

@RequestMapping(value="/priceincrease.htm",method = RequestMethod.GET)
@ResponseBody
protected PriceIncrease formBackingObject(HttpServletRequest request) throws ServletException {
    PriceIncrease priceIncrease = new PriceIncrease();
    priceIncrease.setPercentage(15);
    return priceIncrease;
}

在这里你可以修改控制器的父映射(只需删除它)

@Controller
public class PriceIncreaseFormController {

}