簡體   English   中英

如何使 grpc 原型“時間戳”更改為日期輸入格式?

[英]how to make grpc proto "timestamp" change to Date input format?

我想讓時間戳轉換為Date ,但我期望輸入Date格式,“NOT”秒和納米。 如何將其更改為日期格式輸入?

這是插入數據圖片

@GrpcService
public class ProductGRPCserver extends ProductServiceImplBase {

    @Autowired
    private ProductServiceImpl productServiceImpl;

    public static Date getDateFromTimestamp(Timestamp timestamp) {
        return new Date(Timestamps.toMillis(timestamp));
    }

    @Override
    public void insert(Product request, StreamObserver<APIResponse> responseObserver) {
        ProductEntity productEntity = new ProductEntity();

        Date date = getDateFromTimestamp(request.getProductexpirationdate());

        productEntity.setPurchase_item(request.getPurchaseItem());
        productEntity.setProductname(request.getProductname());
        productEntity.setProductbrand(request.getProductbrand());
        productEntity.setProductprice(request.getProductprice());
        productEntity.setProductdescription(request.getProductdescription());
        productEntity.setProductquantity(request.getProductquantity());
        productEntity.setProductexpirationdate(date);
        System.out.println(date);
        productServiceImpl.saveDataFromDTO(productEntity);

        APIResponse.Builder responce = APIResponse.newBuilder();
        responce.setResponseCode(0).setResponsemessage("Succefull added to database " + productEntity);

        responseObserver.onNext(responce.build());
        responseObserver.onCompleted();

    }

為了獲得更有效的序列化和更具描述性的代碼,而不僅僅是一個字符串,您可以從 Google API 存儲庫復制Date的實現。 如果您只使用 Java,則只需復制以下內容:

syntax = "proto3";

package google.type;

option java_multiple_files = true;
option java_outer_classname = "DateProto";
option java_package = "com.google.type";

message Date {
  int32 year = 1;
  int32 month = 2;
  int32 day = 3;
}

然后您將能夠導入:

import com.google.type.Date;

顯然,如果需要,您可以個性化packagejava_package 之后,這很簡單,您只需設置年、月和日期。

在此感謝我所做的。 我將 date.proto 導入到其他 proto 文件並將“String”從 date.proto @ClémentJean 更改為 Date這是照片更新

import "date.proto";

......

message Product {
    int32 purchase_item = 1;
    string productname = 2;
    string productbrand = 3;
    double productprice = 4;
    string productdescription = 5;
    int32 productquantity = 6;
    .google.type.Date productexpirationdate = 7;
}
//convert to Date to make it compatible to a Entity Date
@GrpcService
public class ProductGRPCserver  extends ProductServiceImplBase{
    
    @Autowired
    private ProductServiceImpl productServiceImpl;
    
//convert Date from date.proto to Java "Date".
    public static Date getDateFromDateProto(com.google.type.Date date) {
        Integer year = date.getYear();
        Integer month = date.getMonth();
        Integer days = date.getDay();
        
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DATE, days);
        Date datess = calendar.getTime();
        
        return datess;
    }
    @Override
    public void insert(Product request, StreamObserver<APIResponse> responseObserver) {
        ProductEntity productEntity = new ProductEntity();

        productEntity.setPurchase_item(request.getPurchaseItem());
        productEntity.setProductname(request.getProductname());
        productEntity.setProductbrand(request.getProductbrand());
        productEntity.setProductprice(request.getProductprice());
        productEntity.setProductdescription(request.getProductdescription());
        productEntity.setProductquantity(request.getProductquantity());

        //setProductexpirationdate is Date and getProductexpirationdate is customize Date proto to make is compatible. convert it
        productEntity.setProductexpirationdate(getDateFromDateProto(request.getProductexpirationdate()));
    
        productServiceImpl.saveDataFromDTO(productEntity);
        APIResponse.Builder  responce = APIResponse.newBuilder();
        responce.setResponseCode(0).setResponsemessage("Succefull added to database " +productEntity);
    
        responseObserver.onNext(responce.build());
        responseObserver.onCompleted(); 
    }
}

上面的代碼正在發送帶有轉換日期的數據。 現在檢索數據是上面相反的代碼,如下所示。

可以說,我調用 ProductEntity.class 方法“toProduct”,並將“Java Date”轉換為“proto Date”,這意味着它與發送數據相反。 您還可以使用方法“getDateFromDateProto”獲取數據庫中 1 行的數據,如 findbyid 並獲取 1 行中的數據這張圖片是檢索數據“列表”



import java.util.Calendar;
import java.util.Date;

import com.grpcserver.product.ProductServer.Product;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProductEntity {
    
    private Integer purchase_item;
    private String productname;
    private String productbrand;
    private Double productprice;
    private String productdescription;
    private Integer productquantity;
    private Date  productexpirationdate;
    
    public Product toProduct(){

        return Product.newBuilder()
                .setPurchaseItem(getPurchase_item())
                .setProductname(getProductbrand())
                .setProductbrand(getProductbrand())
                .setProductprice(getProductprice())
                .setProductdescription(getProductdescription())
                .setProductquantity(getProductquantity())
                .setProductexpirationdate(getDateFromDateProto(getProductexpirationdate()))
                .build();
    }
    
    public static com.google.type.Date getDateFromDateProto(Date date) {
        
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        
        com.google.type.Date datess = com.google.type.Date.newBuilder().setYear(year).setMonth(month).setDay(day).build();
        
        return datess ;
    }
    

    

}

//get list
//"toProduct"
    @Override
    public void findAllRepeated(Product request, StreamObserver<ProductList> responseObserver) {
    
        List<ProductDTO> list = productServiceImpl.getAllPpoduct();
        
        List<Product> products = list.stream().map(ProductDTO::toProduct).collect(Collectors.toList());
        ProductList productList = ProductList.newBuilder().addAllProduct(products)
                .setResultCount(Int64Value.newBuilder().setValue(list.size()).build()).build();
        responseObserver.onNext(productList);
        responseObserver.onCompleted();
        
    }

用於通過rest api輸出的Rest Api輸出郵遞員輸出

將其放入您的原型文件中:

message Date {
  int32 year = 1;
  int32 month = 2;
  int32 day = 3;
}

然后你可以在你的原型文件中使用日期,例如:

message Customer {
  string name = 1;
  string address = 2;
  Date birthDate = 3;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM