下面列出了怎么用com.google.protobuf.util.JsonFormat.Parser的API类实例代码及写法,或者点击链接到github查看源代码。
@SuppressWarnings({ "rawtypes", "unchecked" })
private ProtobufHttpMessageConverter newCustomProtobufMessageConverter() throws Exception {
Constructor[] constructors = ProtobufHttpMessageConverter.class.getDeclaredConstructors();
Constructor requiredConstructor = null;
for (Constructor constructor : constructors) {
if (constructor.getParameterTypes().length == 2) {
constructor.setAccessible(true);
requiredConstructor = constructor;
break;
}
}
Class[] classes = ProtobufHttpMessageConverter.class.getDeclaredClasses();
Class requiredClass = null;
for (Class clazz : classes) {
if (clazz.getSimpleName().equals("ProtobufJavaUtilSupport")) {
requiredClass = clazz;
break;
}
}
Constructor pbUtilSupportConstructor = requiredClass.getConstructor(Parser.class, Printer.class);
pbUtilSupportConstructor.setAccessible(true);
Parser parser = JsonFormat.parser().ignoringUnknownFields();
Printer printer = JsonFormat.printer().includingDefaultValueFields().preservingProtoFieldNames()
.omittingInsignificantWhitespace();
Object support = pbUtilSupportConstructor.newInstance(parser, printer);
return (ProtobufHttpMessageConverter) requiredConstructor.newInstance(support, null);
}
public static List<DynamicMessage> parseToMessages(TypeRegistry registry, Descriptor descriptor,
List<String> jsonTexts) {
Parser parser = JsonFormat.parser().usingTypeRegistry(registry);
List<DynamicMessage> messages = new ArrayList<>();
try {
for (String jsonText : jsonTexts) {
DynamicMessage.Builder messageBuilder = DynamicMessage.newBuilder(descriptor);
parser.merge(jsonText, messageBuilder);
messages.add(messageBuilder.build());
}
return messages;
} catch (InvalidProtocolBufferException e) {
throw new IllegalArgumentException("Unable to parse json text", e);
}
}
public static List<DynamicMessage> parseToMessages(TypeRegistry registry, Descriptor descriptor,
List<String> jsonTexts) {
Parser parser = JsonFormat.parser().usingTypeRegistry(registry);
List<DynamicMessage> messages = new ArrayList<>();
try {
for (String jsonText : jsonTexts) {
DynamicMessage.Builder messageBuilder = DynamicMessage.newBuilder(descriptor);
parser.merge(jsonText, messageBuilder);
messages.add(messageBuilder.build());
}
return messages;
} catch (InvalidProtocolBufferException e) {
throw new IllegalArgumentException("Unable to parse json text", e);
}
}
/**
* Create a {@code Marshaller} for json protos of the same type as {@code defaultInstance}.
*
* <p>This is an unstable API and has not been optimized yet for performance.
*/
public static <T extends Message> Marshaller<T> jsonMarshaller(final T defaultInstance) {
final Parser parser = JsonFormat.parser();
final Printer printer = JsonFormat.printer();
return jsonMarshaller(defaultInstance, parser, printer);
}
/**
* Create a {@code Marshaller} for json protos of the same type as {@code defaultInstance}.
*
* <p>This is an unstable API and has not been optimized yet for performance.
*/
public static <T extends Message> Marshaller<T> jsonMarshaller(final T defaultInstance) {
final Parser parser = JsonFormat.parser();
final Printer printer = JsonFormat.printer();
return jsonMarshaller(defaultInstance, parser, printer);
}