2016-12-08 2 views
0

Je reçois une réponse 404 d'un @RestController renvoyant un objet. Tout semble bien, car j'obtiens une réponse correcte d'une autre URL dans le même @RestController, mais c'est une classe différente.Obtention de la réponse 404 au service de repos du ressort 4

Je ne vois aucune exception ni aucune autre erreur dans les journaux. Seulement 404.

classe est définit comme Problématiques suit:

public class Menu implements Serializable { 
private static final long serialVersionUID=1L; 
private String url; 
private List<Menu> submenu; 
... getters and setters ... 
} 

Je n'ai aucun problème avec une classe similaire. La seule différence est qu'il existe une liste de chaînes au lieu d'une liste de menus.

Quel est le problème?

EDIT: Je ne voulais pas ajouter trop de code à la question. Ce est le contrôleur:

package org.web.ui.controller; 

import java.io.IOException; 
import java.security.Principal; 
import java.util.ArrayList; 
import java.util.Collection; 

import javax.annotation.Resource; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.http.HttpResponse; 

import org.springframework.security.core.GrantedAuthority; 
import org.springframework.security.core.context.SecurityContextHolder; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import com.fasterxml.jackson.databind.ObjectMapper; 

import mx.org.ife.rfe.siirfe.comun.web.bean.LoginStatus; 
import mx.org.ife.rfe.siirfe.comun.web.controller.UserLoginController; 
import mx.org.ife.rfe.siirfe.comun.web.ui.model.Menu; 

@RestController 
@RequestMapping("/menu") 
public class menuController { 

private LoginStatus loginStatus ; 

public menuController() { 
    ArrayList<String> _roles = new ArrayList<>(); 
    _roles.add("TESTCASE"); 
    loginStatus = new LoginStatus(); 
    loginStatus.setRoles(_roles); 

    loginStatus.setAnonymous(true); 
    loginStatus.setError(false); 


} 

@RequestMapping(value = "/app.do") 
public Menu app(HttpResponse response) { 

    return new Menu(); 
} 

@RequestMapping(value="/test1.do") 
public LoginStatus test1(Principal user) { 
    return loginStatus; 
} 


} 

Cette classe est LoginStatus

public class LoginStatus implements Serializable { 

private static final long serialVersionUID = 1L; 
private boolean anonymous = true; 
private Boolean error; 
private String errorMessage; 
private List<String> roles; 
... Getters and Setters ... 
} 

Ceci est dans le web.xml

<servlet> 
    <servlet-name>spring-dispatcher-servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath*:/webApplicationContext.xml, 
      classpath*:/environmentContext.xml, 
      classpath*:/daoContext.xml, 
      classpath*:/menuContext.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring-dispatcher-servlet</servlet-name> 
    <url-pattern>*.do</url-pattern> 
</servlet-mapping> 

Maintenant, une requête get à hostname/menu/app. retourne un code d'erreur 404 tandis qu'une requête get sur hostname/menu/test1.do renvoie un objet json correctement formaté.

J'ai initialisé l'initialisation du menu pour plus de simplicité.

sorties Exemple de tests avec wget:

$ wget wlcap1:9102/siilnere-web/menu/app.do -O - 
--2016-12-08 18:16:51-- http://wlcap1:9102/siilnere-web/menu/app.do 
Resolving wlcap1... 172.19.94.15 
Connecting to wlcap1|172.19.94.15|:9102... connected. 
HTTP request sent, awaiting response... 404 Not Found 
2016-12-08 18:16:51 ERROR 404: Not Found. 

06:16 PM 
$ wget wlcap1:9102/siilnere-web/menu/test1.do -O - 
--2016-12-08 18:16:55-- http://wlcap1:9102/siilnere-web/menu/test1.do 
Resolving wlcap1... 172.19.94.15 
Connecting to wlcap1|172.19.94.15|:9102... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [application/json] 
Saving to: 'STDOUT' 
2016-12-08 18:16:55 (7.62 MB/s) - written to stdout [101] 
06:16 PM 
$ wget wlcap1:9102/siilnere-web/menu/test1.do -O - 2>/dev/null 
{"roles":["EJEMPLO"],"token":null,"anonymous":true,"error":false,"errorMessage":null,"username":null} 
+2

Ainsi, une requête inconnue à une URL inconnue supposée être mappée à un contrôleur de repos inconnu échoue avec un 404. Comment pouvons-nous vous aider? Tout ce que nous pouvons dire, c'est qu'il a presque 0 chance d'être causée par ce que votre méthode retourne. Un 404 signifie qu'il n'a pas trouvé la classe/méthode à appeler en premier lieu. –

+0

Ok. J'ai ajouté du code. Je ne pensais pas que cela serait d'une grande utilité car j'ai noté qu'une demande de méthode similaire dans le même contrôleur n'avait aucun problème. Pouvez-vous penser à quelque chose d'étrange? – dabicho

+0

Pouvez-vous fournir des exemples des URL que vous utilisez? – mangotang

Répondre

1

Dans votre application (...) méthode du contrôleur, je pense que HttpResponse est pas valide param. Ce devrait être ServletResponse ou HttpServletResponse. Vous pouvez donc vous référer à la liste des types de paramètres acceptés d'une méthode de contrôleur ici: http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

+0

Merci. Je vais le lire pour voir si je trouve des indices, mais je viens d'ajouter cela pour voir si je pouvais avoir une idée qui pourrait aider à découvrir ce qui se passe. La méthode n'avait pas de paramètres à l'origine. Je pense que je dois manquer quelque chose quelque part, mais je n'ai trouvé aucun indice sur les fichiers journaux. – dabicho

+0

Oui. C'était le cas avec le dernier code. – dabicho