【问题标题】:Put method using a mapped class (use setters for specified parameter) - Spring boot API使用映射类的放置方法(对指定参数使用设置器) - Spring Boot API
【发布时间】:2021-12-26 11:02:03
【问题描述】:

我正在尝试对所有参数仅使用一个函数对对象发出 PUT 请求。假设我有这个对象结构(JSON):

{
  "id": 3,
  "name": "test",
  "dominio": "dom",
  "altas": "6",
  "bajas": "2",
  "default_group": [
     {
         "idRef": 1,
         "name": "Users",
         "path": "OU=es"
     }
  ],
  "office": [
     {
         "idRef": 1,
         "title": "Intern",
         "name": "CN=Office license",
         "path": "OU=licenseOffice"
     },
     {
         "idRef": 2,
         "title": "Specialist",
         "name": "CN=Office License F3",
         "path": "OU=LicenseGroupF"
     }
  ]
}

我设法使用带有类的 getter 的 Map 函数为 GET 请求执行此操作。

为此,我使用 GET 请求在 HTTP 请求中传递了属性名称:

Map<String, Function<Compania, Object>> mapCompania = Map.of(
        "name", Compania::getName,
        "dominio", Compania::getDominio,
        "altas", Compania::getAltas,
        "bajas", Compania::getBajas,
        "default_group", Compania::getDefault_group,
        "office", Compania::getOffice
);

Function<Compania, Object> retriever = mapCompania.get(fieldName);

但是现在,我找不到实现相同功能的方法,只能使用 setter 方法。比如:

PUT localhost/myClass/3/name --> 它使用 MyClass.setName(input...)

或者:

PUT localhost/myClass/3/office --> 它使用 MyClass.setOffice(Object office)

谁能帮我实现这个目标?非常感谢

【问题讨论】:

    标签: java json spring-boot api


    【解决方案1】:

    假设Compania如下:

    public class Compania {
        private Object name;
        private Object dominio;
        private Object altas;
        private Object bajas;
        private Object default_group;
        private Object office;
    
        public Object getName() {
            return name;
        }
    
        public void setName(Object name) {
            this.name = name;
        }
    
        public Object getDominio() {
            return dominio;
        }
    
        public void setDominio(Object dominio) {
            this.dominio = dominio;
        }
    
        public Object getAltas() {
            return altas;
        }
    
        public void setAltas(Object altas) {
            this.altas = altas;
        }
    
        public Object getBajas() {
            return bajas;
        }
    
        public void setBajas(Object bajas) {
            this.bajas = bajas;
        }
    
        public Object getDefault_group() {
            return default_group;
        }
    
        public void setDefault_group(Object default_group) {
            this.default_group = default_group;
        }
    
        public Object getOffice() {
            return office;
        }
    
        public void setOffice(Object office) {
            this.office = office;
        }
    }
    

    下面的代码应该可以解决问题:

    Map<String, BiConsumer<Compania, Object>> mapCompaniaSetters = Map.of(
            "name", Compania::setName,
            "dominio", Compania::setDominio,
            "altas", Compania::setAltas,
            "bajas", Compania::setBajas,
            "default_group", Compania::setDefault_group,
            "office", Compania::setOffice
    );
    BiConsumer<Compania, Object> setter = mapCompaniaSetters.get(fieldName);
    

    我们可以如下测试它是否真的有效:

    public static void main(String[] args) {
        Map<String, BiConsumer<Compania, Object>> mapCompaniaSetters = Map.of(
                "name", Compania::setName,
                "dominio", Compania::setDominio,
                "altas", Compania::setAltas,
                "bajas", Compania::setBajas,
                "default_group", Compania::setDefault_group,
                "office", Compania::setOffice
        );
        BiConsumer<Compania, Object> setter = mapCompaniaSetters.get("name");
    
        Compania compania = new Compania();
        System.out.println("Empty Compania: " + compania);
        setter.accept(compania, "Test");
        System.out.println("Compania with Name: " + compania);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2022-01-10
      • 2020-10-24
      相关资源
      最近更新 更多