16 Ocak 2018 Salı

JAX-RS @Consumes Anotasyonu - JSON, XML, Form Okumak İçindir

Giriş
Şu satırı dahil ederiz.
import javax.ws.rs.Consumes;
Örnek - Form Post Etmek
Content Type : application/x-www-form-urlencoded olan Http istekleri için kullanılır.

Elimizde şöyle bir form olsun.
<form action="api/customers" method="post" >
  <input type="text" name="name" />
  <input type="text" name="address" />
  <input type="text" name="phone-number" />
  <input type="submit" value="Submit" />
</form>
Sadece name parametresini okumak için şöyle yaparız.
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response readData(@FormParam("name") String payload) {
  ...
}
Örnek - JSON Post Etmek
Şöyle yaparız. Burada WeekendPlay için başka bir anotasyon kullanılmıyor. Jersey altta Jackson kullanıyor. Açıklaması şöyle
Jersey uses Jackson internally to convert Java objects to JSON and vice versa.
Jackson ise varsayılan davranış olarak no-arg constructor ve getter/setter gerektiriyor.  Açıklaması şöyle.
By default Jackson creates instance of any class using default constructor and setter / getter method.
Yani WeekendPlay sınıfı için no-argument constructor ve getter/setter metodları olması yeterli
@POST
@Path("/postPlayer")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response createJsonPlayer(WeekendPlayer player) {
    return Response.ok();
}
Örnek - PathParam + JSON Post Etmek
Şöyle yaparız. Bur örnekte hem URL içinde veri hem de JSON işleniyor.
@POST()
@Path("/{itemId}")
@Consumes(MediaType.APPLICATION_JSON)
public void addVote(@PathParam("itemId") Integer itemId, Vote vote) {
    voteDAO.create(vote);
}

Örnek - Form
Şöyle yaparız
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.FormParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.EntityPart;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.io.InputStream;

@Path("/job")
public class FileResource {

  @Path("/apply")
  @POST
  @Consumes(MediaType.MULTIPART_FORM_DATA)
  public Response applyForJob(@FormParam("name") String name, 
                              @FormParam("recentPhoto") EntityPart photo,
                              @FormParam("resume") EntityPart resume) {
    processApplication(name,
        photo.getMediaType(), 
        photo.getContent(), 
        resume.getMediaType(), 
        resume.getContent());

    return Response.ok("Application received").build();
  }

  private void processApplication(String name, 
                                  MediaType mediaType, 
                                  InputStream content,
                                  MediaType mediaType1, 
                                  InputStream content1) {
  }
}

Örnek - XML Post Etmek
Örnek ver

Hiç yorum yok:

Yorum Gönder