J'ai créé une page qui demande à l'utilisateur de remplir certains champs du formulaire et lorsqu'il le soumet, le formulaire est envoyé à une méthode Restful que vous pouvez voir ci-dessous:
@POST
@Path("addUser")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void addUser(@FormParam("username") String username,
@FormParam("password") String password,
@FormParam("id") String id,
@FormParam("group_name") String groupName,
@FormParam("authority_name") String authorityName,
@FormParam("authority_id") String authorityId
)
{
//Something will be done here
}
Comment puis-je rediriger l'utilisateur à la fin de cette fonction vers (disons) index.jsp?
Créez un URI à l'aide de javax.ws.rs.core.UriBuilder
qui mappe les paramètres et les autres données que vous souhaitez conserver. Utilisez ensuite Response.temporaryRedirect
pour renvoyer une redirection au client et transmettez-lui l'URI que vous avez créé.
changez votre code de cette façon, addUser () devrait retourner un objet Response
public Response addUser(@FormParam("username") String username,
@FormParam("password") String password,
@FormParam("id") String id,
@FormParam("group_name") String groupName,
@FormParam("authority_name") String authorityName,
@FormParam("authority_id") String authorityId
)
{
//Something will be done here
Java.net.URI location = new Java.net.URI("../index.jsp?msg=A_User_Added");
return Response.temporaryRedirect(location).build()
}
J'en viens finalement à la conclusion qu'il n'y a pas d'autre moyen que ce que j'ai fait:
Voici donc ma solution:
try {
Java.net.URI location = new Java.net.URI("../index.jsp?msg=A_User_Added");
throw new WebApplicationException(Response.temporaryRedirect(location).build());
} catch (URISyntaxException e) {
e.printStackTrace();
}
En ajoutant ce bloc à mon code, j'ai obtenu ce dont j'avais besoin. J'espère que cela vous aidera aussi.
Voir ci-dessous l'utilisation de la redirection dans les services Web:
public class LoginWebService {
@POST
@Path("/check")
public Response checkDetails(@FormParam("name") String name,@FormParam("pass") String pass ) throws URISyntaxException {
URI uri = new URI("/login/success");
URI uri2= new URI("http://localhost:9090/NewWebServiceproject/new/login/failure");
if(name.equals("admin") && pass.equals("pass"))
//@Path("http://localhost:8010/NewWebServiceproject/new/login/success");
{
return Response.temporaryRedirect(uri).build();
//Response.seeOther(uri);
//return Response.status(200).entity("user successfully login").build();
}
else
{
return Response.temporaryRedirect(uri2).build();
//Response.seeOther(uri2);
//return Response.status(200).entity("user logon failed").build();
}
}
@POST
@Path("/success")
public Response successpage()
{
return Response.status(200).entity("user successfully login").build();
}
@POST
@Path("/failure")
public Response failurepage()
{
return Response.status(200).entity("user logon failed").build();
}
}
Il n'est pas judicieux d'utiliser "WebApplicationException" afin de rediriger la demande. dans Jersey (2.4.1), vous devriez pouvoir rediriger la demande via la servlet normale (request.getServletContext (). getRequestDispatcher (). forward () ou simplement response.sendRedirect ()).
Voici comment Jersey traite la demande
org.glassfish.jersey.servlet.ServletContainer.service(HttpServletRequest request, HttpServletResponse response)
requestScope.runInScope
final ContainerResponse response = endpoint.apply(data)
methodHandler.invoke(resource, method, args);
Responder.process(ContainerResponse);
Ce methodHandler est votre REST classe de service, méthode est la fonction de cette classe de service.
L'étape pour rediriger la page devient sournoise
Obtenez l'injection (requête, réponse) via Jersey (demande @Context HttpServletRequest, réponse @Context HttpServletResponse) dans le champ ou le paramètre de fonction de la classe
Appelez request.getServletContext (). GetRequestDispatcher () pour obtenir le répartiteur pour "transférer" Ou utilisez Response.sendRedirect (url).
Une fois que votre application est renvoyée (juste null), Jersey essaiera de traiter le résultat dans le fichier "Responder.process (ContainerResponse)". Dans cette étape, il utilisera response pour définir le statut (204 aucun contenu pour votre déclaration NULL).
Le point clé ici est donc que vous devez finaliser/fermer l’objet de réponse avant de revenir de votre fonction de service. Sinon, Jersey pourrait écraser votre sortie.
Petits conseils sur les raisons pour lesquelles "WebApplicationException" peut écraser Jersey repsponse. C'est parce que org.glassfish.jersey.server.ServerRuntime.mapException () utilisera "webApplicationException.getResponse ()" comme résultat de la réponse renvoyée.