Kathiravan Ramaswamy
Kathiravan Ramaswamy

Reputation: 56

how to send array of objects in spring boot post request

My request looks like in postman

[


    {
            "skill_name":"cms",
            "skill_desc":"php",
            "is_cerificate_completed":true,
            "emp_skill_id":-1,
            "emp_id":3,
            "status":"SMP",
            "reason_for_reject":"",
            "active":true,
            "submitted":true,
            "user_id":3

        },


{
        "skill_name":"wordpress",
        "skill_desc":"php",
        "is_cerificate_completed":true,
        "emp_skill_id":-1,
        "emp_id":3,
        "status":"SMP",
        "reason_for_reject":"",
        "active":true,
        "submitted":true,
        "user_id":3

    }

]

I am trying to send this as my post request, the issue i am facing is that only the second object is passed to the stored procedure in MySQL, Please Help me to send array of objects to spring boot server using POST Request.

public void saveEmployeeSkillMatrix(List<EmployeeSkillMatrix> emp_skill_matrix) {
        StoredProcedureQuery save = em.createStoredProcedureQuery("sp_iu_skill_matrix");

        save.registerStoredProcedureParameter("p_emp_skill_id", Integer.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_emp_id", Integer.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_skill_name", String.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_skill_desc", String.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_is_certificate_completed", Boolean.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_status", String.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_reason_for_reject", String.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_active", Boolean.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_submitted", Boolean.class, ParameterMode.IN)
        .registerStoredProcedureParameter("p_usr_id", Integer.class, ParameterMode.IN)
        .registerStoredProcedureParameter("error_msg", String.class, ParameterMode.INOUT);

        for(EmployeeSkillMatrix esm : emp_skill_matrix)
        {
            save.setParameter("p_emp_skill_id", esm.getEmp_skill_id());
            save.setParameter("p_emp_id", esm.getEmp_id());
            save.setParameter("p_skill_name", esm.getSkill_name());
            save.setParameter("p_skill_desc", esm.getSkill_desc());
            save.setParameter("p_is_certificate_completed", esm.isCertificate_completed());
            save.setParameter("p_status", esm.getStatus());
            save.setParameter("p_reason_for_reject", esm.getReason_for_reject());
            save.setParameter("p_active", esm.isActive());
            save.setParameter("p_submitted", esm.isSubmitted());
            save.setParameter("p_usr_id", esm.getUser_id());
            save.setParameter("error_msg", new String("error_msg"));
        }

        String errString = (String) save.getOutputParameterValue("error_msg");

    }

Upvotes: 0

Views: 13929

Answers (1)

mrkurtan
mrkurtan

Reputation: 591

You would need to create a DTO object encapsulating the JSON input array:

public class EmployeeSkillMatrixInDto {
    private List<EmployeeSkillMatrix> employees;
    public List<EmployeeSkillMatrix> getEmployees() { return employees; }
    public void setEmployees(List<EmployeeSkillMatrix> {
        this.employees = employees; 
    }
}

Change the JSON input to:

 { "employees": [ ... your employees array here ... ] }

And finally the controller such as:

@RequestMapping(path = "/save", method = RequestMethod.POST)
@ResponseBody
public YourCustomResponse upload(@RequestBody EmployeeSkillMatrixInDto inDto) {
    yourService.saveEmployeeSkillMatrix(inDto.getEmployees());
    //... rest of your response handling ...
}

Upvotes: 3

Related Questions