lang:java:rest
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:java:rest [2017/01/08 23:45] – Ajout de commentaire sur les paramètres. root | lang:java:rest [2020/04/27 11:48] (Version actuelle) – maff -> html root | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
Dans l' | Dans l' | ||
- | Attention, j'ai eu personnellement beaucoup de mal à faire fonctionner REST sur Eclipse. On pense que tout est bien configurer | + | Attention, j'ai eu personnellement beaucoup de mal à faire fonctionner REST sur Eclipse. On pense que tout est bien configuré |
J'ai réussi plusieurs fois à faire fonctionner REST sans que '' | J'ai réussi plusieurs fois à faire fonctionner REST sans que '' | ||
Ligne 12: | Ligne 12: | ||
package com.llgc; | package com.llgc; | ||
+ | import java.io.File; | ||
+ | import java.io.FileOutputStream; | ||
+ | import java.io.IOException; | ||
+ | import java.io.InputStream; | ||
+ | import java.io.OutputStream; | ||
import javax.ws.rs.Consumes; | import javax.ws.rs.Consumes; | ||
import javax.ws.rs.GET; | import javax.ws.rs.GET; | ||
+ | import javax.ws.rs.POST; | ||
import javax.ws.rs.Path; | import javax.ws.rs.Path; | ||
import javax.ws.rs.PathParam; | import javax.ws.rs.PathParam; | ||
Ligne 20: | Ligne 26: | ||
import javax.ws.rs.core.MediaType; | import javax.ws.rs.core.MediaType; | ||
+ | import javax.ws.rs.core.Response; | ||
+ | import javax.ws.rs.core.Response.ResponseBuilder; | ||
+ | /* | ||
+ | import org.glassfish.jersey.media.multipart.FormDataContentDisposition; | ||
+ | import org.glassfish.jersey.media.multipart.FormDataParam; | ||
+ | */ | ||
import org.json.JSONException; | import org.json.JSONException; | ||
import org.json.JSONObject; | import org.json.JSONObject; | ||
Ligne 27: | Ligne 38: | ||
public class Serveur { | public class Serveur { | ||
// Ici, le path est cumulatif avec le "/ | // Ici, le path est cumulatif avec le "/ | ||
- | // On fait donc bien référence au chemin "/ | + | // On fait donc bien référence au chemin "/ |
+ | // flottant | ||
@Path(" | @Path(" | ||
// Méthode GET | // Méthode GET | ||
@GET | @GET | ||
- | // Requête XML | + | // Mime Type en sortie |
@Produces(MediaType.APPLICATION_XML) | @Produces(MediaType.APPLICATION_XML) | ||
- | // Requête XML | + | // Mime Type en entrée |
@Consumes(MediaType.APPLICATION_XML) | @Consumes(MediaType.APPLICATION_XML) | ||
// On dit que le f est extrait du path et que c'est un double. | // On dit que le f est extrait du path et que c'est un double. | ||
Ligne 60: | Ligne 72: | ||
jsonObject.put(" | jsonObject.put(" | ||
return jsonObject.toString(); | return jsonObject.toString(); | ||
+ | } | ||
+ | |||
+ | @GET | ||
+ | @Path("/ | ||
+ | @Produces(" | ||
+ | // Le client veut télécharger | ||
+ | public Response download() { | ||
+ | File file = new File(" | ||
+ | ResponseBuilder response = Response.ok((Object) file); | ||
+ | response.header(" | ||
+ | return response.build(); | ||
+ | } | ||
+ | |||
+ | @Path("/ | ||
+ | @POST | ||
+ | @Consumes(MediaType.MULTIPART_FORM_DATA) | ||
+ | // Le client veut uploader | ||
+ | public Response upload(@FormDataParam(" | ||
+ | @FormDataParam(" | ||
+ | String uploadedFileLocation = " | ||
+ | saveToFile(uploadedInputStream, | ||
+ | String output = "File uploaded via Jersey based RESTFul Webservice to: " + uploadedFileLocation; | ||
+ | return Response.status(200).entity(output).build(); | ||
+ | } | ||
+ | |||
+ | private void saveToFile(InputStream uploadedInputStream, | ||
+ | try { | ||
+ | OutputStream out = null; | ||
+ | int read = 0; | ||
+ | byte[] bytes = new byte[1024]; | ||
+ | out = new FileOutputStream(new File(uploadedFileLocation)); | ||
+ | while ((read = uploadedInputStream.read(bytes)) != -1) { | ||
+ | out.write(bytes, | ||
+ | } | ||
+ | out.flush(); | ||
+ | out.close(); | ||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
} | } | ||
} | } | ||
</ | </ | ||
+ | Utilisation d'un Bean pour architecturer ces données | ||
+ | <code java> | ||
+ | public class MyBeanParam { | ||
+ | @PathParam(" | ||
+ | private String pathParam; | ||
+ | |||
+ | @MatrixParam(" | ||
+ | @Encoded | ||
+ | @DefaultValue(" | ||
+ | private String matrixParam; | ||
+ | |||
+ | @HeaderParam(" | ||
+ | private String headerParam; | ||
+ | |||
+ | private String queryParam; | ||
+ | |||
+ | public MyBeanParam(@QueryParam(" | ||
+ | this.queryParam = queryParam; | ||
+ | } | ||
+ | |||
+ | public String getPathParam() { | ||
+ | return pathParam; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | @POST | ||
+ | public void post(@BeanParam MyBeanParam beanParam, String entity) { | ||
+ | final String pathParam = beanParam.getPathParam(); | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | [[https:// | ||
<file html web.xml> | <file html web.xml> | ||
<?xml version=" | <?xml version=" | ||
- | <web-app xmlns: | + | <web-app xmlns: |
+ | | ||
< | < | ||
< | < | ||
Ligne 92: | Ligne 179: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | ====Exemple de client==== | ||
+ | <code java> | ||
+ | import java.net.URI; | ||
+ | |||
+ | import javax.ws.rs.client.Client; | ||
+ | import javax.ws.rs.client.ClientBuilder; | ||
+ | import javax.ws.rs.client.WebTarget; | ||
+ | import javax.ws.rs.core.MediaType; | ||
+ | import javax.ws.rs.core.Response; | ||
+ | |||
+ | public class ClientJersey { | ||
+ | public static void delete() { | ||
+ | String url = " | ||
+ | URI uri = URI.create(url); | ||
+ | |||
+ | final Client client = ClientBuilder.newClient(); | ||
+ | WebTarget webTarget = client.target(uri); | ||
+ | |||
+ | Response response = webTarget.request().delete(); | ||
+ | |||
+ | if (response.getStatus() != 200) { | ||
+ | throw new RuntimeException(" | ||
+ | } | ||
+ | |||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | try { | ||
+ | delete(); | ||
+ | |||
+ | String url = " | ||
+ | URI uri = URI.create(url); | ||
+ | |||
+ | final Client client = ClientBuilder.newClient(); | ||
+ | WebTarget webTarget = client.target(uri); | ||
+ | |||
+ | Response response = webTarget.request(MediaType.APPLICATION_XML).get(); | ||
+ | |||
+ | if (response.getStatus() != 200) { | ||
+ | throw new RuntimeException(" | ||
+ | } | ||
+ | |||
+ | String output = response.readEntity(String.class); | ||
+ | |||
+ | System.out.println(" | ||
+ | System.out.println(output); | ||
+ | } catch (Exception e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
=====Erreurs===== | =====Erreurs===== |
lang/java/rest.1483915555.txt.gz · Dernière modification : 2017/01/08 23:45 de root