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}
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. –
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
Pouvez-vous fournir des exemples des URL que vous utilisez? – mangotang