Generate QR Code using Java

 
QR code (Quick Response Code) is the trademark for a type of matrix bar-code, first designed for the automotive industry in Japan. A QR code consists of black modules (square dots) arranged in a square grid on a white background, which can be read by an imaging device (such as a camera, scanner, etc.) and processed using Reed–Solomon error correction until the image can be appropriately interpreted. The required data are then extracted from patterns that are present in both horizontal and vertical components of the image.
Now lets see simple Java Code to generate QR code by using qrgen API

GenerateQRCode.java


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.image.ImageType;

public class GenerateQRCode {

 public static void main(String[] args) {
  new GenerateQRCode().generateQRImage("sdfhjkjhrf23khsdfkh#@Wersdfcsdfsdf24r4sdf");
 }

 
 public void generateQRImage(String qrCode){
  
  try {
   
   ByteArrayOutputStream out = QRCode.from(qrCode).withSize(250, 250).to(ImageType.PNG).stream();

   FileOutputStream fout = new FileOutputStream(new File("C://"+qrCode+".png"));
            
            fout.write(out.toByteArray());
 
            fout.flush();
            fout.close();
            
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
  
 }
}


OUTPUT:

Generate QR Code using Java

Spring Boot + Restful Web Service + Spring Security

When we talk about Spring Boot (Simplifying Spring for Everyone) makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files). Now lets see simple example with combination of Spring Boot and Spring Restful Web Service which includes spring security for all our services or API's.
Spring Boot + Restful Web Service + Spring Security



pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.app.javadiscover</groupId>
 <artifactId>springbootdemo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>war</packaging>

 <name>springbootdemo</name>
 <description>Demo project for Spring Boot</description>

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.2.5.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <java.version>1.7</java.version>
 </properties>

 <dependencies>
  
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-ws</artifactId>
  </dependency>
  
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>
 
 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>

</project>


ServletInitializer.java


package com.app.javadiscover;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

 @Override
 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  return application.sources(SpringbootdemoApplication.class);
 }
}


SpringbootdemoApplication.java


package com.app.javadiscover;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootdemoApplication.class, args);
    }
}


MyController.java


package com.app.javadiscover.controller;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller
public class MyController {

 @RequestMapping(value="/sayhello/{name}", method=RequestMethod.GET, headers="Accept=application/json")
 public ResponseEntity<String> helloController(@PathVariable String name){
  
  String sayHello = "Hello "+name + " :)";
  
  return new ResponseEntity<String>(sayHello, HttpStatus.OK);
 } 
}


application.properties


security.user.password=springsecuritypassword


Spring Boot + Restful Web Service + Spring Security


OUTPUT:

Hello Java Discover - Spring Boot + Restful Web Service + Spring Security


Please download complete project from this link.

Convert JSON to Java Object using Google Gson library


In earlier tutorial we have seen how to convert Java Object to JSON. Lets take same example and try to convert JSON to Java Object using Google Gson library. The JSON output of earlier tutorial will be saved in file and will use same JSON file for this sample demo.

pom.xml

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>


 Company.java

import java.util.ArrayList;
import java.util.List;

public class Company {

 private List<String> employeeNames = new ArrayList<String>();
 
 private String companyName;
 
 private String companyAddress;
 
 private String domain;

 public List<String> getEmployeeNames() {
  return employeeNames;
 }

 public void setEmployeeNames(List<String> employeeNames) {
  this.employeeNames = employeeNames;
 }

 public String getCompanyName() {
  return companyName;
 }

 public void setCompanyName(String companyName) {
  this.companyName = companyName;
 }

 public String getCompanyAddress() {
  return companyAddress;
 }

 public void setCompanyAddress(String companyAddress) {
  this.companyAddress = companyAddress;
 }

 public String getDomain() {
  return domain;
 }

 public void setDomain(String domain) {
  this.domain = domain;
 } 
}


 company.json File:

{"employeeNames":["Steve","Jobs","Gates","Gary"],"companyName":"ABC Infotech","companyAddress":"Bangalore, India","domain":"Media"}


 JSONTesting.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import com.google.gson.Gson;

public class JSONTesting {
 
 public static void main(String[] args) {
  
  try {
  
   BufferedReader br = new BufferedReader( new FileReader("c:\\ASIC\\company.json"));
  
   Company obj = new Gson().fromJson(br, Company.class);

   System.out.println("Company Name    : "+obj.getCompanyName());
   System.out.println("Employee Names  : " + obj.getEmployeeNames());
   System.out.println("Company Address : "+obj.getCompanyAddress());
   System.out.println("Domain          : "+obj.getDomain());
   
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}


 OUTPUT:

Convert JSON to Java Object using Google Gson library


Convert Java Object to JSON using Google Gson library

In this tutorial lets see how to convert Java Object to JSON using Google Json library. Its quite very easy and just by toJson() method we can convert to JSON. Lets see simple example for converting Java Object to JSON along with maven dependency for Google Gson.
Covert Java Object to JSON using Google Gson library


pom.xml

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.3.1</version>
</dependency>


Company.java
import java.util.ArrayList;
import java.util.List;

public class Company {

 private List<String> employeeNames = new ArrayList<String>();
 
 private String companyName;
 
 private String companyAddress;
 
 private String domain;

 public List<String> getEmployeeNames() {
  return employeeNames;
 }

 public void setEmployeeNames(List<String> employeeNames) {
  this.employeeNames = employeeNames;
 }

 public String getCompanyName() {
  return companyName;
 }

 public void setCompanyName(String companyName) {
  this.companyName = companyName;
 }

 public String getCompanyAddress() {
  return companyAddress;
 }

 public void setCompanyAddress(String companyAddress) {
  this.companyAddress = companyAddress;
 }

 public String getDomain() {
  return domain;
 }

 public void setDomain(String domain) {
  this.domain = domain;
 } 
}

JSONTesting.java
import com.google.gson.Gson;

public class JSONTesting {
 
    public static void main( String[] args ) {
     
     Company obj = new Company();
     
     obj.getEmployeeNames().add("Steve");
     obj.getEmployeeNames().add("Jobs");
     obj.getEmployeeNames().add("Gates");
     obj.getEmployeeNames().add("Gary");
     
     obj.setCompanyName("ABC Infotech");
     obj.setCompanyAddress("Bangalore, India");
     obj.setDomain("Media");
     
     Gson gson = new Gson();
     
        //Converts Java Object to JSON
     String json = gson.toJson(obj);
     
     System.out.println(json);
    }
}


OUTPUT:


{"employeeNames":["Steve","Jobs","Gates","Gary"],"companyName":"ABC Infotech","companyAddress":"Bangalore, India","domain":"Media"}

java.util.Date to java.sql.Date with timestamp

java.sql.Date() class mainly used in JDBC API. If we need to set date value or need to get date from JDBC result-set then we need to go for java.sql.Date(). Actually java.sql.Date() class extends java.util.Date() class and we can do all operations which we used with java.util.Date() class. Only one main difference between these classes are java.sql.Date() class hold only date and timestamp. Even if try to call methods like getHours(), getMinutes() and getSeconds() which will throw exception like

java.lang.IllegalArgumentException
 at java.sql.Date.getHours(......)

In that case if we need date along with timestamp to deal with JDBC API we can use java.sql.timestamp() class. A thin wrapper around java.util.Date() that allows the JDBC API to identify this as an SQL TIMESTAMP value. It adds the ability to hold the SQL TIMESTAMP fractional seconds value, by allowing the specification of fractional seconds to a precision of nanoseconds. A Timestamp also provides formatting and parsing operations to support the JDBC escape syntax for timestamp values.

Now lets see simple example to get current date and time in java.sql.Date() and convert to java.sql.Date() and java.sql.Timestamp()


public class DateTimeTesting {

 public static void main(String[] args) {
  
  java.util.Date date = new java.util.Date();
  System.out.println("Util DATE       : "+date);
  
  java.sql.Date sqlDate = new java.sql.Date(date.getTime());
  System.out.println("SQL DATE        : "+sqlDate);
  
  java.sql.Timestamp sqlDateTime = new java.sql.Timestamp(date.getTime());
  System.out.println("SQL DATE & TIME : "+sqlDateTime);
 }
}

OUTPUT:

java.util.Date to java.sql.Date with timestamp



Try-with-Resources in Java 7

The try-with-resources statement is a try statement that declares one or more resources within try statement. A resource(s) is an object that must be closed after the program is finished with it. The try-with-resources statement ensures that each resource is closed at the end of the statement and finally block is no more required when we use it.
Try-with-Resources in Java 7


If we see earlier to Java 7 like which we are familiar with try-catch-finally block. Here if exception thrown from try block, then finally block will be executed. Suppose if finally block also thrown with exception then try block would probably be more relevant to propagate exception than finally block.

Lets see simple example with both try-catch-finally and try-with-resources.

try-catch-finally example to open a file and to read line by line.


public class TryCatchFinallyTest {
 
 public static void main(String[] args) {
  
  FileInputStream fis = null;
  BufferedReader br = null;
  
  try{
   fis = new FileInputStream("C:\\textfile.txt");
   br = new BufferedReader(new InputStreamReader(fis));
   
   String line = null;
   while ((line = br.readLine()) != null) {
    System.out.println(line);
   }
   
  }catch(IOException ex){
   ex.printStackTrace();
  }finally{
   if(fis != null){
    try {
     fis.close();
    } catch (IOException e) {
     e.printStackTrace();
    }   
   }
   if(br != null){
    try {
     br.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }   
 } 
}


try-with-resources example to open a file and to read line by line.

public class TryWithResourceTest {
 
 public static void main(String[] args) {
  
  try(FileInputStream fis = new FileInputStream("C:\\textfile.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fis))
    ){
   
   String line = null;
   while ((line = br.readLine()) != null) {
    System.out.println(line);
   }   
  }  
 } 
}

If we see both examples we can find the difference in code. In Java 7 we have more simple and less code compared to earlier try-catch-finally block. Moreover from advantage side opened resources will be closed automatically once they are out of block, but in earlier we need to close explicitly. 


Spring: Data access using JdbcDaoSupport

Similar to JDBCTemplate by extending JdbcDaoSupport classes we can achieve JBDC dataaccess and just need to inject data source into EmpDaoImpl Objects through configuration file. Rest will be taken care by Spring.

In our earlier tutorials we have seen about Spring JDBC and JDBCTemplate examples. Lets take same example class and will extend JdbcDaoSupport class.

pom.xml remains same

Employee.java remains same

EmpDao.java remains same

MyTestClass.java

package com.app;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.app.dao.EmpDao;
import com.app.model.Employee;

public class MyTestClass {

 public static void main(String[] args) {
  
  ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("spring-jdbc.xml");

  EmpDao object = appContext.getBean(EmpDao.class);
  
  Employee emp = new Employee(143, "Bill", "Director");
  
  object.insert(emp);
  
  appContext.close();
 }
}


EmpDaoImpl.java

package com.app.dao;


import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.app.model.Employee;

public class EmpDaoImpl extends JdbcDaoSupport implements EmpDao {

 public void insert(Employee emp) {
  
  String query = "INSERT INTO employee (id, empname, designation) VALUES (?, ?, ?)";
  
  getJdbcTemplate().update(query, new Object[] { emp.getId(), emp.getEmpName(), emp.getDesignation() });
 }
}


OUTPUT:

Spring: Data access with JdbcDaoSupport



Spring: Data access with JDBCTemplate

Spring provides a template class called JdbcTemplate that makes it easy to work with SQL relational databases and JDBC. Most JDBC code is mired in resource acquisition, connection management, exception handling, and general error checking that is wholly unrelated to what the code is meant to achieve. The JdbcTemplate takes care of all of that for you. All you have to do is focus on the task at hand.

In our earlier tutorial we have seen about Spring JDBC with simple example. Lets take same example for this tutorial and will implement separate method called insertByJDBCTemplate() which uses Spring JDBCTemplate to insert a record.

pom.xml remains same

Employee.java remains same

EmpDao.java

package com.app.dao;

import com.app.model.Employee;

public interface EmpDao {

 public void insert(Employee emp);
 public void insertByJDBCTemplate(Employee emp);
 
}


EmpDaoImpl.java

package com.app.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

import com.app.model.Employee;

public class EmpDaoImpl implements EmpDao {

 
 private DataSource dataSource;
 private JdbcTemplate jdbcTemplate;
 
 public void setDataSource(DataSource dataSource) {
  this.dataSource = dataSource;
 }
  
 public void insert(Employee emp) {
 
  String query = "INSERT INTO employee (id, empname, designation) VALUES (?, ?, ?)";
  Connection con = null;
 
  try {
   con = dataSource.getConnection();
   PreparedStatement ps = con.prepareStatement(query);
   ps.setInt(1, emp.getId());
   ps.setString(2, emp.getEmpName());
   ps.setString(3, emp.getDesignation());
   ps.executeUpdate();
   ps.close();
 
  } catch (SQLException e) {
   throw new RuntimeException(e);
 
  } finally {
   if (con != null) {
    try {
     con.close();
    } catch (SQLException e) {}
   }
  }  
 }
 
 
 
 public void insertByJDBCTemplate(Employee emp) {
  
  String query = "INSERT INTO employee (id, empname, designation) VALUES (?, ?, ?)";
  
  jdbcTemplate = new JdbcTemplate(dataSource);
   
  jdbcTemplate.update(query, new Object[] { emp.getId(), emp.getEmpName(), emp.getDesignation() });
 }
}


MyTestClass.java

package com.app;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.app.dao.EmpDao;
import com.app.model.Employee;

public class MyTestClass {

 public static void main(String[] args) {
  
  ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("spring-jdbc.xml");

  EmpDao object = appContext.getBean(EmpDao.class);
  
  Employee emp = new Employee(10011, "Steve", "CEO");
  
  //object.insert(emp);
  object.insertByJDBCTemplate(emp);
  
  appContext.close();
 }
}


OUTPUT:

Spring: Data access with JDBCTemplate