Qr Code Generation Service Layer

In this lesson, we'll implement the QR code generation functionality in our ticket platform's service layer using the ZXing library.

Setting Up QR Code Dependencies

To generate QR codes, we need to add the ZXing library dependencies to our project:

<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.5.1</version> </dependency>

Creating the QR Code Writer Bean

Let's create a configuration class to provide a QRCodeWriter bean:

@Configuration public class QrCodeConfig { @Bean public QRCodeWriter qrCodeWriter() { return new QRCodeWriter(); } }

Implementing the QR Code Service

The QR code service implementation handles generating and storing QR codes:

@Service @RequiredArgsConstructor public class QrCodeServiceImpl implements QrCodeService { private static final int QR_HEIGHT = 300; private static final int QR_WIDTH = 300; private final QRCodeWriter qrCodeWriter; private final QrCodeRepository qrCodeRepository; @Override public QrCode generateQrCode(Ticket ticket) { try { // Generate a unique ID for the QR code UUID uniqueId = UUID.randomUUID(); String qrCodeImage = generateQrCodeImage(uniqueId); // Create and save the QR code entity QrCode qrCode = new QrCode(); qrCode.setId(uniqueId); qrCode.setStatus(QrCodeStatusEnum.ACTIVE); qrCode.setValue(qrCodeImage); qrCode.setTicket(ticket); return qrCodeRepository.saveAndFlush(qrCode); } catch(IOException | WriterException ex) { throw new QrCodeGenerationException("Failed to generate QR Code", ex); } } private String generateQrCodeImage(UUID uniqueId) throws WriterException, IOException { // Create a bit matrix for the QR code BitMatrix bitMatrix = qrCodeWriter.encode( uniqueId.toString(), BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT ); // Convert to BufferedImage BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(bitMatrix); // Convert to base64 string try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) { ImageIO.write(qrCodeImage, "PNG", baos); byte[] imageBytes = baos.toByteArray(); return Base64.getEncoder().encodeToString(imageBytes); } } }

Summary

  • Added the zxing dependency
  • Implemented QRCode generation
© 2026 Devtiro Ltd. All rights reserved