Spring Boot 如何根据httprequest中发送的值保存表列中的值?

6pp0gazn  于 2023-05-17  发布在  Spring
关注(0)|答案(1)|浏览(157)

我正在使用Sping Boot 应用程序。从 Postman 我发送JSON

{  
   "id":2, 
    "name": "Niki" ,
    "empType":"SENIOR"
}

现在,如果请求中的empType是“SENIOR”,那么我必须在员工类型列中保存“C-9”,如果是“JUNIOR”,那么我应该在员工类型列中保存“C-10”。请告诉我如何做?

ev7lccsx

ev7lccsx1#

您可以在两种情况下实现这一点。使用Jackson提供的自定义JsonDeserializer类或使用setter方法。
在第一种情况下:
1.创建一个包含必要字段的EmployeeDTO模型类:

public class EmployeeDTO {
    private int id;
    private String name;
    private String empType;
    // Getters and setters 
}

1.实现自定义反序列化器,将JSON值Map到所需的表示:

public class EmployeeTypeDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        String empType = jsonParser.getValueAsString();
        if ("SENIOR".equals(empType)) {
            return "C-9";
        } else if ("JUNIOR".equals(empType)) {
            return "C-10";
        }
        return empType;
    }
}

1.使用**@JsonDeserialize**注解EmployeeDTO类中的empType属性,以指定自定义反序列化器的用法:

@JsonDeserialize(using = EmployeeTypeDeserializer.class)
private String empType;

或者,您可以通过使用setter方法来实现所需的Map:

public void setEmpType(String empType) {
    System.out.println("Setter method called");
    if (empType.equals("SENIOR")) {
        this.empType = "C-9";
    } else if (empType.equals("JUNIOR")) {
        this.empType = "C-10";
    } else {
        // Handle the case when empType is not the desired type
        // You can choose to throw an exception or set the empType to null or an empty string
        // throw new IllegalArgumentException("Invalid empType");
        // this.empType = null;
        this.empType = "";
    }
}

根据您的业务逻辑,您可以决定如何处理empType与所需类型不匹配的情况,无论是通过抛出异常还是将其设置为null。
您甚至可以在服务层中设置empType。

相关问题