微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Protobuf 3 Java:如何仅比较和更新输入对象中的那些字段?方案:例如对db

如何解决Protobuf 3 Java:如何仅比较和更新输入对象中的那些字段?方案:例如对db

在下面的代码中,api在POST正文中获得一个“ Person” obj,

我的技术要求:

  • 如果仅发送一个“个人”字段,则只能将该字段与db中的对象进行比较。
  • 如果有更改,如果不只是从db返回对象,则调用save()。
  • 如何将下面的代码更改为更通用和更干净的代码。是否有任何与对象类型无关的实用程序方法
    public Model.Person save(Model.Person in) {
        String updateId = in.getId();
        System.out.println("updateId = " + updateId);
        Model.Person pExisting = get(updateId);
        Model.Person.Builder outBuild = Model.Person.newBuilder(pExisting);
        boolean hasChange = false;
        //Change only fields that are provided in POST body.
        //Todo do not compare createTs,updateTs -- they are not provided in POST to update.
        if(!in.getFirstName().isEmpty()){ //Todo - Find if there is a generic util in protobuf java.
            if(!Objects.equals(in.getFirstName(),pExisting.getFirstName())){
                outBuild.setFirstName(in.getFirstName());
                hasChange = true;
            }
        }
        if(!in.getLastName().isEmpty()){
            if(!Objects.equals(in.getLastName(),pExisting.getLastName())){
                outBuild.setLastName(in.getLastName());
                hasChange = true;
            }
        }
        
        if(!hasChange){
            System.out.println("nothing to update ... "+System.currentTimeMillis() );
            return pExisting;
        }
        final Model.Person updatePerson = outBuild.build();
        map.put(updateId,updatePerson); //Todo move to H2 or postgres later
        return updatePerson;
    }

样本模型

Syntax = "proto3";
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
package my.model;

option java_outer_classname = "Model"; //muni.api.Model
option java_generic_services = false; //default,prevents complex generic
option java_multiple_files = false; //default behavior

message Person{
  //Output only
  string id=3;
  string firstName = 4;
  string lastName= 5;
  ContactChannels contactChannels = 8;
  //Output only
  google.protobuf.Timestamp createTime = 1;
  //Output only
  google.protobuf.Timestamp updateTime = 2;
}

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。