25 Aralık 2017 Pazartesi

URLDecoder ve URLEncoder Sınıfları

Giriş
Bu sınıflar URL nesnesine verilecek parametreler için kullanılırlar. Açıklaması şöyle
The characters allowed in a URI are either reserved or unreserved (or a percent character as part of a percent-encoding). Reserved characters are those characters that sometimes have special meaning. For example, forward slash characters are used to separate different parts of a URL (or more generally, a URI). Unreserved characters have no such meanings. Using percent-encoding, reserved characters are represented using special character sequences.
Şu karakterler reserved oldukları için Percent Encoding'e tabidir.
! # $ & ' ( ) * + , / : ; = ? @ [ ]
Aslında Percent Encoding basitçe karakterin hexadecimal değerinin başına yüzde karakterinin eklenmesidir. Şöyle yapılır.
%26 -> &

%2B -> +

URLDecoder Sınıfı
Şu satırı dahil ederiz.
import java.net.URLDecoder;
decode metodu
Percent encoding'den string'e geri çevirir. Şöyle yaparız.
URLDecoder.decode("%25", "UTF-8")
URLEncoder Sınıfı
Şu satırı dahil ederiz.
import java.net.URLEncoDecoder;
encode metodu
Örnek
UTF-8 kullanarak şöyle yaparız. & karakteri encode edilir.
String urlParameters = "imei=1111224345&date_of_activation=2016-02-18";
String encodedParams = URLEncoder.encode(urlParameters, "UTF-8");
Örnek
ASCII kullanarak şöyle yaparız. ?, =, @, &, % karakterleri encode edilir.
String urlParameters = "?email=api.ikisan@aau.in&password=%~?7ON9Xjp;BcYu";
String encodedParams = URLEncoder.encode( urlParameters, "ASCII" )
parametreler şuna dönüşür.
"%3Femail%3Dapi.ikisan%40aau.in%26password%3D%25%7E%3F7ON9Xjp%3BBcYu";
Örnek
Şöyle yaparız. Boşluk karakteri encode edilir. Boşluk karakteri encode edilir.
URLEncoder.encode("This string has å à è ö and spaces","UTF-8")
Şuna dönüşür.
This+string+has+%C3%A5+%C3%A0+%C3%A8+%C3%B6+and+spaces


JAX-RS @MatrixParam Anotasyonu

constructor
URL içindeki key=value; şeklindeki parametrenin key ismini alır.

Örnek
Şöyle yaparız.
package com.domain.mypackage;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;

// It's good practice to include a version number in the path so you can have
// multiple versions deployed at once. That way consumers don't need to upgrade
// right away if things are working for them.
@Path("calc/1.0")
public class CalculatorV1_0 {
  @GET
  @Consumes("text/plain")
  @Produces("text/plain")
  @Path("addTwoNumbers")
  public String add(@MatrixParam("firstNumber") int n1,
                    @MatrixParam("secondNumber") int n2) {
    return String.valueOf(n1 + n2);
  }
}
Çağırmak için şöyle yaparız.
http://localhost:8080/myContext/rest/calc/1.0/addTwoNumbers;firstNumber=2;secondNumber=3

RxJava Subscription Sınıfı

constructor
Şöyle yaparız.
Subscription subscription =  Observable.subscribe(new Subscriber<Type>() {
  @Override
  public void onCompleted() {
  }

  @Override
  public void onError(Throwable e) {
  }

  @Override
  public void onNext(String responseString) {
  }
});
isUnsubsribed metodu
Şöyle yaparız.
if(subscription!=null && !subscription.isUnsubscribed()){
      //Cancel(unSubscribe) the request if running(not completed)
      subscription.unsubscribe();
      //START A NEW REQUEST HERE
 }else{
      //already completed so START A NEW REQUEST
 }
unsubscribe
İmzası şöyle
public interface Subscription {
  void unsubscribe();
}
Örnek
Eğer kendimiz bir Observable.subscribe(Subscriber) kodluyor olsaydık şöyle yapardık
public Subscription addListener(Consumer<String> listener) {
  listeners.add(listener);
  return () -> listeners.remove(listener);
}
Daha sonra şöyle yaparız
Subscription s = subject.addListener(printListener::print);
// later on when you want to remove the listener
s.unsubscribe();