У меня есть веб-сервис Restful, использующий загрузку Spring. Ответ - боб EmployeeResponseData
, который преобразуется в json к весне. В соответствии с бизнесом веб-сервис должен возвращать данные сотрудника, когда введенный идентификатор сотрудника совпадает, иначе должен быть возвращен ответ json с ошибкой, как показано ниже
{"Error ": "Employee not not found for empId "+ **empId** }
На данный момент я получаю правильный ответ json согласно бину EmployeeResponseData
, если входной empId совпадает. Но я получаю пустым, если empId не совпадает.
Как я могу вернуть JSON с желаемой ошибкой в случае пользовательского исключения, без необходимости формировать json и возвращать вместо использования bean-объектов в качестве возвращаемого объекта, поскольку он автоматически преобразуется в jSON с помощью Spring.
Ниже приведен код.
Фасоль
EmployeeRequestData
package com.beans;
import org.springframework.stereotype.Component;
@Component
public class EmployeeRequestData {
private int EmpoyeeId;
public int getEmpoyeeId() {
return EmpoyeeId;
}
public void setEmpoyeeId(int empoyeeId) {
EmpoyeeId = empoyeeId;
}
}
EmployeeResponseData
package com.beans;
import java.util.ArrayList;
import org.springframework.stereotype.Component;
@Component
public class EmployeeResponseData {
private int employeeId;
private String name;
private String department;
private ArrayList<String> skills;
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public ArrayList<String> getSkills() {
return skills;
}
public void setSkills(ArrayList<String> skills) {
this.skills = skills;
}
}
Контроллер
package com.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.beans.EmployeeResponseData;
import com.service.ServiceRequest;
@RestController
public class WebServiceController {
@Autowired
private ServiceRequest serviceRequest;
@RequestMapping(value="restws/getEmpDetails/{empId}",method=RequestMethod.GET)
//@ResponseBody // not required since using @RestController
public EmployeeResponseData getEmployeeDetails(@PathVariable("empId") int empId) {
return serviceRequest.getEmployeeDetails(empId);
}
}
Услуги
package com.service;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.beans.EmployeeResponseData;
import com.exception.EmployeeNotFoundException;
@Service
public class ServiceRequest {
private static Logger LOGGER = LoggerFactory.getLogger(ServiceRequest.class);
@Autowired
private EmployeeResponseData employeeResponseData;
public EmployeeResponseData getEmployeeDetails(int empId) {
ArrayList<String> employeeSkills = (ArrayList<String>) Stream.of("Core Java"
,"Restful web services"
,"Spring Boot"
,"PLSQL").collect(Collectors.toList());
employeeResponseData.setEmployeeId(empId);
employeeResponseData.setName("Priyanjan Kumar");
employeeResponseData.setDepartment("ENGNE");
employeeResponseData.setSkills(employeeSkills);
}else {
try {
throw new EmployeeNotFoundException(empId);
} catch (EmployeeNotFoundException e) {
LOGGER.info("Employee data not found for empId :"+empId);
}
}
return employeeResponseData;
}
}
Пользовательское исключение
package com.exception;
public class EmployeeNotFoundException extends Exception{
private String message = "Employee not found";
public EmployeeNotFoundException() {
// super(message); it takes only static variable
}
public EmployeeNotFoundException(int empId) {
message = message+" for Employee : "+ Integer.toString(empId);
}
@Override
public String toString() {
return message;
}
}
SpringBootApplication
package com;
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);
}
}