下面列出了怎么用com.fasterxml.jackson.databind.ser.std.StdScalarSerializer的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public JsonSerializer createSerializer() {
return new StdScalarSerializer<Enum>(Enum.class) {
@Override
public void serialize(Enum value, JsonGenerator gen, SerializerProvider provider) throws IOException {
ProtobufGenerator pgen = (ProtobufGenerator) gen;
switch (protobufConfig.getEnumMode()) {
case ByOrdinal:
// plus 1 to match .net
pgen.writeNumber(value.ordinal() + 1);
break;
case ByValue:
pgen.writeNumber(fetchValueOfEnum(value));
break;
}
}
};
}
protected StdScalarSerializer<Object> getSecretSerializer() {
return new StdScalarSerializer<Object>(String.class, false) {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
if (value != null) {
String sValue = value.toString();
if (EncryptedSecret.isEncryptedSecret(sValue)) {
gen.writeString(secretSessionManager.decrypt(sValue));
} else {
gen.writeString(sValue);
}
}
}
};
}
protected StdScalarSerializer<Object> getSecretFileSerializer(
BeanPropertyWriter beanPropertyWriter, SecretFile annotation, boolean shouldDecrypt) {
return new StdScalarSerializer<Object>(String.class, false) {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
if (value != null) {
String sValue = value.toString();
if (!EncryptedSecret.isEncryptedSecret(sValue) && !isURL(sValue)) {
// metadataUrl is either a URL or a filepath, so only add prefix if it's a path
sValue = annotation.prefix() + sValue;
}
if (EncryptedSecret.isEncryptedSecret(sValue) && shouldDecrypt) {
// Decrypt the content of the file and store on the profile under a random
// generated file name
String name = newRandomFilePath(beanPropertyWriter.getName());
byte[] bytes = secretSessionManager.decryptAsBytes(sValue);
profile.getDecryptedFiles().put(name, bytes);
sValue = annotation.prefix() + getCompleteFilePath(name);
}
gen.writeString(sValue);
}
}
};
}
@Override
public JsonSerializer<BigInteger> createSerializer() {
return new StdScalarSerializer<BigInteger>(BigInteger.class) {
@Override
public void serialize(BigInteger value, JsonGenerator gen, SerializerProvider provider) throws IOException {
ProtobufGenerator pgen = (ProtobufGenerator) gen;
// Just write. If value is bigger than Long.MAX_VALUE then the sign bit will match ulong.
pgen.writeNumber(value.longValue());
}
};
}
@Override
public JsonSerializer<Duration> createSerializer() {
return new StdScalarSerializer<Duration>(Duration.class) {
@Override
public void serialize(Duration value, JsonGenerator gen, SerializerProvider provider) throws IOException {
// TODO .net TimeSpan to string logic is not clear yet
gen.writeString("1");
}
};
}
@Override
public JsonSerializer<Short> createSerializer() {
return new StdScalarSerializer<Short>(Short.class) {
@Override
public void serialize(Short value, JsonGenerator gen, SerializerProvider provider) throws IOException {
ProtobufGenerator pgen = (ProtobufGenerator) gen;
pgen.writeNumber((int) value);
}
};
}
@Override
public JsonSerializer<Byte> createSerializer() {
return new StdScalarSerializer<Byte>(Byte.class) {
@Override
public void serialize(Byte value, JsonGenerator gen, SerializerProvider provider) throws IOException {
ProtobufGenerator pgen = (ProtobufGenerator) gen;
pgen.writeNumber((int) value);
}
};
}
@Override
public JsonSerializer<Boolean> createSerializer() {
return new StdScalarSerializer<Boolean>(Boolean.class) {
@Override
public void serialize(Boolean value, JsonGenerator gen, SerializerProvider provider) throws IOException {
ProtobufGenerator pgen = (ProtobufGenerator) gen;
pgen.writeNumber(value ? 1 : 0);
}
};
}
@SuppressWarnings("serial")
@Override
public JsonSerializer<Character> createSerializer() {
return new StdScalarSerializer<Character>(Character.class) {
@Override
public void serialize(Character value, JsonGenerator gen, SerializerProvider provider) throws IOException {
ProtobufGenerator pgen = (ProtobufGenerator) gen;
pgen.writeNumber(value);
}
};
}
private static ObjectMapper createObjectMapper() {
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
final SimpleModule mod = new SimpleModule("form module");
mod.addSerializer(Form.class, new StdScalarSerializer<Form>(Form.class){
@Override
public void serialize(final Form value, final JsonGenerator gen, final SerializerProvider provider) throws IOException {
gen.writeObject(value.data());
}
});
mapper.registerModule(mod);
return mapper;
}