31 Mart 2017 Cuma

JAX-RS @POST Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
Girdi Multipart, Çıktı Response
Şöyle yaparız.
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response addImage(@FormDataParam("file") InputStream is) {
  ...
  return Response.ok(200).build();
}
Girdi Form, Çıktı Json
Şöyle yaparız.
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Registration loginUserInfo(@FormParam("logusertype") String logUserType,
                                 @FormParam("userNAME") String UserNAME,
                                 @FormParam("PassWORD") String PAssWORD)
                                 throws ParseException
{
...
}
Girdi Json, Çıktı Response
JAX-RS Response döner. Şöyle yaparız.
@POST
@Path("/valid") 
@Consumes(MediaType.APPLICATION_JSON)   
public Response isValid(JSONObject userDetails )
{
  ...
  return Response.status(200).entity("OK").build();
}
Girdi Json, Çıktı Text
Post girdi olarak json alabilir. Bu durumda metod parametresi tek bir nesne olacaktır. Şöyle yaparız. Çıktı olarak html, json veya başka bir şey dönebilir.
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN})
@Path("/post")
public String postMessage(Message msg) throws Exception{
}

30 Mart 2017 Perşembe

AutoCloseable Arayüzü

Giriş
Bu arayüzden kalıtmak kaynakların kapatılmasını kolaylaştırır.

close metodu
Şöyle yaparız.
public class MyService implements AutoCloseable {
  public void doWork() {
    // ...
  }

  @Override
  public void close() {
    // release resources
  }
}
Kullanım
Şöyle yaparız.
try (MyService myService = new MyService()) {
  //...
  myService.doWork()
  //...
  myService.doWork()
  //...
}

27 Mart 2017 Pazartesi

JAX-RS Configuration Arayüzü

getProperty metodu
Şöyle yaparız.
@Context
private Configuration config;
...

String prop = (String) config.getProperty('customProp');

Narrowing Primitive Conversion

long'tan int'e
Açıklaması şöyle
A narrowing conversion of a signed integer to an integral type T simply discards all but the n lowest order bits, where n is the number of bits used to represent type T. In addition to a possible loss of information about the magnitude of the numeric value, this may cause the sign of the resulting value to differ from the sign of the input value.
Açıklaması şöyle
the rule for converting a long that's too big for the int is to apply the wrap-around rule into the destination type. (Under the hood, the significant bits from the source type are simply discarded.)
Şöyle yaparız.
System.out.println((int) 2147483648l);
Çıktı olarak şunu alırız.
-2147483648
long 8 byte uzunluğundadır ve şu şekildedir.
00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
int'e çevirirken en son 4 byte alınır. Bu da eksi bir sayıdır.
10000000 00000000 00000000 00000000
float'tan int'e
Açıklaması şöyle
...if the floating-point number is not an infinity, the floating-point value is rounded to an integer value V, rounding toward zero using IEEE 754 round-toward-zero mode (§4.2.3).
...[if] the value [is] too large (a positive value of large magnitude or positive infinity), [then] the result of the first step is the largest representable value of type int or long.
Açıklaması şöyle
The rule for converting a float that's too big for the destination type is to take the largest possible for the destination type.
Şöyle yaparız.
System.out.println((int) 2147483648f);
Çıktı olarak şunu alırız. float 2147483648 değerine yuvarlanır ancak bu değer int'e sığmaz. int'e sığan en büyük değer alınır.
2147483647
final değişkenler
final değişkenler promotion'a uğrasa bile narrowing ile aynı tipe atanabilir. Açıklaması şöyle
In addition, if the expression is a constant expression (§15.28) of type byte, short, char, or int:
  • A narrowing primitive conversion may be used if the type of the variable is byte, short, or char, and the value of the constant expression is representable in the type of the variable.
Şu kod derlenmez.
byte foo = 1;
byte fooFoo = foo + foo;
Çıktı olarak şunu alırız.
Error:(5, 27) java: incompatible types: possible lossy conversion from int to byte
Şu kod final değişkenlere narrowing uygulandığı için derlenir.
final byte foo = 1;
final byte fooFoo = foo + foo;



21 Mart 2017 Salı

JPA @MappedSuperclass Anotasyonu

Giriş
@Entity kalıtımı için şöyle yaparız.
@MappedSuperClass
class MotherOfAllEntities {
   @Embedded
   Audit audit;
}

@Entity
class ChildClass extends MotherOfAllEntities {
}
@Embeddable kalıtımı da Entity ile aynıdır. Şöyle yaparız.
@Embeddable
public class BookId extends MotherOfAllEntities {
...
}
Soft Delete
Şöyle yaparız. Diğer sınıfları bu atadan kalıtırız.
@MappedSuperclass
abstract class AbstractEntity {
  @Column(name = "deleted_ind", nullable = false)
  Boolean deleted = Boolean.FALSE
}

20 Mart 2017 Pazartesi

EntityTransaction Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
begin ve commit metodu
Şöyle yaparız
EntityManager em = ...;
EntityTransaction tx = null;

try{

 tx = em.getTransaction();
 tx.begin();
 ...
 ...
 em.persist(foo);
 ...
 tx.commit();
} catch(){
...
}


18 Mart 2017 Cumartesi

Jackson @JsonIgnoreProperties Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
Şöyle yaparız.
@JsonIgnoreProperties(ignoreUnknown = true)
public class Computer {
  private String hostname;

  public String getName() {
    return hostname;
  }

  public String toString() {
    return "Computer [hostname=" + hostname + "]";
  }
}

Jackson @JsonIgnore Anotasyonu

Belirtilen alanın json'a çevrilmemesini sağlar. Şöyle yaparız.
public class Bean {

  @JsonIgnore
  private String field1;

  private String field2

  //getters and setters

}

CRC32 Sınıfı

getValue metodu
Şöyle yaparız:
byte buffer[]=...
CRC32 crc32 = new CRC32();
crc32.update(buffer);
return crc32.getValue();

14 Mart 2017 Salı

SSLSession Sınıfı

constructor
Şöyle yaparız.
// Get session after the connection is established
SSLSession sslSession = sslSocket.getSession();
getCipherSuite metodu
Şöyle yaparız.
System.out.println("\tCipher suite : " + sslSession.getCipherSuite());
Çıktı olarak şunu alırız.
Cipher suite : TLS_DH_anon_WITH_AES_128_GCM_SHA256
getLocalCertificates metodu
Açıklaması şöyle
Certificate[] getLocalCertificates()
Returns the certificate(s) that were sent to the peer during handshaking.
Note: This method is useful only when using certificate-based cipher suites.
When multiple certificates are available for use in a handshake, the implementation chooses what it considers the "best" certificate chain available, and transmits that to the other side. This method allows the caller to know which certificate chain was actually used.
Returns:
an ordered array of certificates, with the local certificate first followed by any certificate authorities. If no certificates were sent, then null is returned.
Şöyle yaparız.
System.out.println(sslSession.getLocalCertificates());
getPeerHost metodu
Şöyle yaparız.
System.out.println(sslSession.getPeerHost());
Çıktı olarak şunu alırız.
127.0.0.1
getProtocol metodu
Şöyle yaparız.
System.out.println("\tProtocol : " + sslSession.getProtocol());
Çıktı olarak şunu alırız.
Protocol : TLSv1.2
getSessionContext metodu
Şöyle yaparız.
System.out.println("\tSession context : " + sslSession.getSessionContext());
Çıktı olarak şunu alırız.
Session context : sun.security.ssl.SSLSessionContextImpl@781df1a4