Monday 5 August 2019

Spring boot REST: Ordering the response payload


@JsonPropertyOrder annotation is used to specify the order of entity properties while serializing.

Example
@JsonPropertyOrder({"last_name", "first_name", "employee_id"})
public class Employee {

  @JsonProperty("employee_id")
  private int id;

  @JsonProperty("first_name")
  private String firstName;

  @JsonProperty("last_name")
  private String lastName;

  .....
  .....
}

As per above snippet, last_name comes first followed by first_name followed by employee_id.

Find the below working application.


App.java
package com.sample.app;

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

@SpringBootApplication
public class App {
  public static void main(String[] args) {

    SpringApplication.run(App.class, args);

  }
}


EmployeeController.java
package com.sample.app.cotroller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.sample.app.model.Employee;
import com.sample.app.repository.EmployeeRepository;

@RestController
@RequestMapping("api/v1/")
public class EmployeeController {

  @Autowired
  private EmployeeRepository empRepo;

  @RequestMapping(value = "employees", method = RequestMethod.GET)
  public ResponseEntity<List<Employee>> all() {
    return ResponseEntity.ok(empRepo.all());
  }

  @RequestMapping(value = "employees", method = RequestMethod.POST)
  public ResponseEntity<Employee> create(@RequestBody Employee emp) {
    Employee persistedEmp = empRepo.add(emp);

    return ResponseEntity.status(HttpStatus.CREATED).body(persistedEmp);

  }
}


HomeController.java
package com.sample.app.cotroller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

  @RequestMapping("/")
  public String home() {
    return "Hello World";
  }
}


Employee.java
package com.sample.app.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonPropertyOrder({"last_name", "first_name", "employee_id"})
public class Employee {

  @JsonProperty("employee_id")
  private int id;

  @JsonProperty("first_name")
  private String firstName;

  @JsonProperty("last_name")
  private String lastName;

  public Employee(int id, String firstName, String lastName) {
    super();
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  @Override
  public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append("Employee [id=").append(id).append(", firstName=").append(firstName).append(", lastName=")
        .append(lastName).append("]");
    return builder.toString();
  }

}


EmployeeRepository.java
package com.sample.app.repository;

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

import org.springframework.stereotype.Repository;

import com.sample.app.model.Employee;

@Repository
public class EmployeeRepository {

  private static final List<Employee> emps = new ArrayList<> ();
  
  private static int counter = 4;
  
  static {
    Employee emp1 = new Employee(1, "Sunil", "Dayanand");
    Employee emp2 = new Employee(2, "Keerthi", "Shetty");
    Employee emp3 = new Employee(3, "Ram", "Anand");
    
    emps.add(emp1);
    emps.add(emp2);
    emps.add(emp3);
    
  }
  
  public List<Employee> all(){
    return emps;
  }
  
  public Employee add(Employee emp) {
    emp.setId(counter);
    counter++;
    
    emps.add(emp);
    return emp;
  }
  
}


pom.xml
<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>springRest</groupId>
  <artifactId>springRest</artifactId>
  <version>1</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
  </parent>

  <name>springbootApp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

  </dependencies>
</project>


Total project structure looks like below.

Run App.java.


Open the url ‘http://localhost:8080/api/v1/employees’ in browser, you can see below json response.
[
  {
    "last_name": "Dayanand",
    "first_name": "Sunil",
    "employee_id": 1
  },
  {
    "last_name": "Shetty",
    "first_name": "Keerthi",
    "employee_id": 2
  },
  {
    "last_name": "Anand",
    "first_name": "Ram",
    "employee_id": 3
  }
]

You can download complete working application from this link.




Previous                                                    Next                                                    Home

No comments:

Post a Comment