URL-адреса ошибок контроллера @RequestMapping

Мое приложение не работает с сопоставлением запросов, запрос всегда работает с одним и тем же методом handleRequest, контроллером является RestController.java, и URL-адреса перенаправляют на него, когда есть путь /REST2/*, он работает хорошо, но всегда с одним и тем же методом. Но метод «обновление» никогда не работает, когда я отправляю запрос на locahost: 9080/myapp/REST2/rrr, и если я изменяю URL-адрес, т.е. localhost: 9080/myapp/REST2/XXX, также запрос будет обработан методом handleRequest.

RequestMapping не работает, я пробовал другие решения, но не работает.

Есть ли у вас какие-либо идеи?

Restcontroller.java

public class RestController implements Controller{
private Configuration config;
private static String[] requestHeaders = {"accept", "pragma"};
private static String[] responseHeaders = {};    

public void setConfig(Configuration config)
{
    this.config = config;
}


@RequestMapping(value="/rrr") public ModelAndView update(HttpServletRequest request, HttpServletResponse response) throws Exception 
     {

    String asset_name = request.getParameter("assetid");
     response.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
     response.setCharacterEncoding("UTF-8"); // You want world domination, huh?

     String values = "Working"+ asset_name;
     response.setContentLength(values.length());

     PrintWriter out = response.getWriter();

    out.println(values);
    return null;

}

@RequestMapping(value ="/home")public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception 
{
    Arrays.sort( requestHeaders );
    Arrays.sort( responseHeaders );
    String values;

    String asset_name = request.getParameter("assetid");
    ...
   response.setContentLength(values.length());
    //
    PrintWriter out = response.getWriter();

    out.println(values);


    return null;
}}

весна-servlet.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" xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

  <!-- View resolver. Prepends prefix /WEB-INF/jsp and suffix .jsp to view names. -->
  <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
  </bean>

  <!-- Always use full path when mapping URLs to bean names. -->
  <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="true" />
  </bean>

  <!-- Home page. -->
  <bean name="/home.app" class="com.fatwire.wem.sample.HomeController">
    <property name="config" ref="config" />
  </bean>  
  <!-- Installation page. -->
  <bean name="/install.app" class="com.fatwire.wem.sample.InstallController">
    <property name="config" ref="config" />
  </bean>
  <!-- Layout page. -->
  <bean name="/layout.app" class="com.fatwire.wem.sample.LayoutController" />  
  <!-- REST proxy page. -->
  <bean name="/REST/**" class="com.fatwire.wem.sample.ProxyController">
    <property name="config" ref="config" />
  </bean>
    <!-- REST proxy page. -->
  <bean name="/REST2/**" class="com.fatwire.wem.sample.RestController">
    <property name="config" ref="config" />
  </bean>


</beans>

веб.xml

<?xml version="1.0" encoding="UTF-8"?>

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

  <!-- Bootstrap Spring configuration to be used by both SSO and MVC -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>  

  <!-- WEM SSO Listener -->
  <listener>
    <listener-class>com.fatwire.wem.sso.SSOListener</listener-class>
  </listener>       

  <!-- Configure Spring MVC -->
  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.app</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/REST/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/REST2/*</url-pattern>
  </servlet-mapping>


  <!-- WEM SOO Filter -->
  <filter>
    <filter-name>WEM SSO Filter</filter-name>
    <filter-class>com.fatwire.wem.sso.SSOFilter</filter-class>
  </filter>  
  <filter-mapping>
    <filter-name>WEM SSO Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

Запросить AJAX

 function load_form(data){
                var asset_id = data;
                $.post('REST2/home', {
                    assetid : data,

                }, function(responseText) {
                alert(responseText);
                });
    }

    function update_form(){
        var asset_id = "XXX";
        $.post('REST2/rrr', {
            assetid : asset_id,

        }, function(responseText) {
            alert(responseText)



        });

person Ricard    schedule 24.02.2016    source источник
comment
попробуйте указать HTTP-глагол в контроллере, @RequestMapping (значение =/rrr, метод = RequestMethod.POST)   -  person backtrack    schedule 24.02.2016
comment
Я пробую @RequestMapping(value =/home, method=RequestMethod.POST) и @RequestMapping(value =/rrr, method=RequestMethod.POST), но работает с той же проблемой...   -  person Ricard    schedule 24.02.2016


Ответы (1)


Попробуйте добавить аннотации @Controller и @RequestMapping к классу RestController следующим образом:

  @Controller
  @RequestMapping(value="/REST2")
  public class RestController implements Controller{

И добавьте method=RequestMethod.POST @RequestMapping таких методов:

  @RequestMapping(value ="/home", method=RequestMethod.POST)
  ...
  @RequestMapping(value ="/rrr", method=RequestMethod.POST)  
person Abdelhak    schedule 24.02.2016
comment
какую библиотеку мне нужно импортировать: import org.springframework.stereotype.Controller; или импортировать org.springframework.web.servlet.mvc.Controller; потому что у меня конфликт - person Ricard; 25.02.2016
comment
Попробуйте эти классы: import org.springframework.web.bind.annotation.PathVariable; импортировать org.springframework.web.bind.annotation.RequestMapping; импортировать org.springframework.web.bind.annotation.RequestMethod; импортировать org.springframework.web.bind.annotation.RestController; с ‹dependency› ‹groupId›org.springframework‹/groupId› ‹artifactId›spring-web‹/artifactId› ‹version›3.0.4.RELEASE‹/version› ‹/dependency› - person Abdelhak; 25.02.2016
comment
Это решение правильное, но вам нужно изменить RestController на Controller, наконец, библиотека контроллера была: import org.springframework.stereotype.Controller, и я удалил реализацию контроллера, чтобы разрешить контроллер, спасибо - person Ricard; 25.02.2016