关于使用jackson和spring-boot将base64编码的JSON解码为POJO的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android–使用jackson对象映射器将JSO
关于使用jackson和spring-boot将base64编码的JSON解码为POJO的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – 使用jackson对象映射器将JSON数组转换为POJO、asp.net-mvc – 带有Base64编码的JsonResult、Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值、javascript – 如何用JS / PHP解码base64编码的图像? (以前使用Actionscript编码)等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 使用jackson和spring-boot将base64编码的JSON解码为POJO
- android – 使用jackson对象映射器将JSON数组转换为POJO
- asp.net-mvc – 带有Base64编码的JsonResult
- Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值
- javascript – 如何用JS / PHP解码base64编码的图像? (以前使用Actionscript编码)
使用jackson和spring-boot将base64编码的JSON解码为POJO
我有这样的要求
{ "varA" : "A", "varB" : "TCFNhbiBKb3NlMRgwFgYDVQQK"}
其中key varB
是base64编码的JSON字符串。像这样的东西:
{ "nestedVarB1": "some value here", "nestedVarB2" : "some other value here"}
我想将其转换成这样的一些POJO:
@Datapublic class MyRequest { private String varA; private B varB;}@Datapublic class B { private String nestedVarB1; private String nestedVarB2;}
我
如何将JSON直接转换为MyRequest
使用Jackson和Spring Boot的转换?
注意:
- POJO
MyRequest
和B
非常大,B
可以进一步嵌套,因此手动进行将是一项艰巨的任务。 - 我无法控制来自第三方的请求。因此,无法更改请求的格式。
答案1
小编典典我已经做了一些实验,这是一个简单的Jackson Deserializer,应该可以为您工作。
Deserializer实现ContextualDeserializer接口以访问实际的bean属性(例如varB
)。这是检测正确结果类型的必要条件,因为解串器本身可以附加到任何类型的字段。
import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.*;import com.fasterxml.jackson.databind.deser.ContextualDeserializer;import com.fasterxml.jackson.databind.exc.InvalidFormatException;import java.io.IOException;import java.util.Base64;public class Base64Deserializer extends JsonDeserializer<Object> implements ContextualDeserializer { private Class<?> resultClass; @Override public JsonDeserializer<?> createContextual(DeserializationContext context, BeanProperty property) throws JsonMappingException { this.resultClass = property.getType().getRawClass(); return this; } @Override public Object deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException { String value = parser.getValueAsString(); Base64.Decoder decoder = Base64.getDecoder(); try { ObjectMapper objectMapper = new ObjectMapper(); byte[] decodedValue = decoder.decode(value); return objectMapper.readValue(decodedValue, this.resultClass); } catch (IllegalArgumentException | JsonParseException e) { String fieldName = parser.getParsingContext().getCurrentName(); Class<?> wrapperClass = parser.getParsingContext().getCurrentValue().getClass(); throw new InvalidFormatException( parser, String.format("Value for ''%s'' is not a base64 encoded JSON", fieldName), value, wrapperClass ); } }}
这是一个映射类的例子。
public class MyRequest { private String varA; @JsonDeserialize(using = Base64Deserializer.class) private B varB; public String getVarA() { return varA; } public void setVarA(String varA) { this.varA = varA; } public B getVarB() { return varB; } public void setVarB(B varB) { this.varB = varB; }}
android – 使用jackson对象映射器将JSON数组转换为POJO
我能够将一个json对象映射到POJO.But如何使用相同的jackson框架将json对象的数组转换为pojo.
private void jsonToPojo(){ ObjectMapper mapper=new ObjectMapper(); try { User1 user1=mapper.readValue(readFromFile(),User1.class); User1[] user2=mapper.readValue(readFromFile(),User1[].class); System.out.println(user1); Toast.makeText(getApplicationContext(),"inside try",0).show(); } catch (JsonParseException e) { // Todo Auto-generated catch block Log.i("Exception","jsonparseexception"); e.printstacktrace(); } catch (JsonMappingException e) { // Todo Auto-generated catch block Log.i("Exception","jsonmapping exception"); e.printstacktrace(); } catch (IOException e) { // Todo Auto-generated catch block Log.i("Exception","ioexception"); e.printstacktrace(); } }
这是类用户对象.
public class User { private int age = 23; private String name = "amal"; private List<String> messages = new ArrayList<String>() { { add("hi"); add("how"); add("are u."); } }; //getter and setter methods @Override public String toString() { return "User [age=" + age + ",name=" + name + "," + "messages=" + messages + "]"; }
这是我试图做的:(readFromFile()从文件中获取json)
User1[] user2=mapper.readValue(readFromFile(),User1[].class);
jsonToPojo()仅适用于一个对象.但是,如果我尝试上面的代码行,它不会采取以下json:
[ { "age":"23","messages":["hi","how","are u."],"name":"amal" },{ "age":"98","messages":["Reply","my","question"],"name":"You" } ]
解决方法
public class Test { /** * @param args */ public static void main(String[] args) { User a = new User(23,"amal"); ArrayList<String> message = new ArrayList<String>(); message.add("m1"); message.add("m2"); a.setMessages(message); User b = new User(58,"pete"); User[] ab = new User[] {a,b}; ObjectMapper mapper = new ObjectMapper(); try { String s1 = getJson1(a); System.out.println(s1); User user1 = mapper.readValue(s1,User.class); System.out.println(user1); System.out.println("----------------"); String s2 = getJson2(ab); System.out.println(s2); User[] user2 = mapper.readValue(s2,User[].class); for (User u : user2) System.out.println(u); } catch (Exception e) { e.printstacktrace(); } } private static String getJson1(User user) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsstring(user); } private static String getJson2(User[] ab) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsstring(ab); } } public class User { private int age; private String name; private ArrayList<String> messages; public User() { super(); } public User(int age,String name) { this(); this.age = age; this.name = name; } // **************** // Getter & Setter .... // **************** }
你会得到这个输出:
{"age":23,"name":"amal","messages":["m1","m2"]} User [age=23,name=amal,messages=[m1,m2]] ---------------- [{"age":23,"m2"]},{"age":58,"name":"pete","messages":null}] User [age=23,m2]] User [age=58,name=pete,messages=null]
asp.net-mvc – 带有Base64编码的JsonResult
对象中的一个属性是必须为Base64编码的字符串.
public class MyClass { public string BlockOfText = "Hello World"; }
应该转换为以下Json结果
{ "BlockOfText" : "SGVsbG8gV29ybGQ=" }
如何告诉Json Serializer将属性编码为Base64?
解决方法
在序列化对象之前,只需执行以下操作:
var instance.BlockOfText64Base = System.Convert.ToBase64String(Encoding.Default.GetBytes(instance.BlockOfText)); return Json(instance,JsonRequestBehavior.AllowGet);
希望能帮助到你.
Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值
[ { "code": "","total": 24,"name": null },{ "code": "","total": 1,"name": "Test" } ]
我正在将它转换为Pojo列表.下面是我的pojo.
public class ItemCategory { private String code; private String name; private String total; public ItemCategory() { } public ItemCategory(final String code,final String name,final String total) { super(); this.code = code; this.name = name; this.total = total; } /** * @return the code */ public String getCode() { return code; } /** * @param code * the code to set */ public void setCode(final String code) { this.code = code; } /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(final String name) { this.name = name; } /** * @return the count */ public String getTotal() { return total; } /** * @param count * the count to set */ public void setTotal(final String total) { this.total = total; } }
一切正常.但我想删除要转换为pojo的值,其代码为空/空值.即“代码”:“”,或“代码”:null
我使用下面的jackson代码将json转换为pojo.
Object pojo = null; try { pojo = mapper.readValue(jsonString,typeReference); } catch (JsonParseException e) { throw new InvalidPojoException(e.toString(),e); } catch (JsonMappingException e) { throw new InvalidPojoException(e.toString(),e); } catch (IOException e) { throw new InvalidPojoException(e.toString(),e); } catch (Exception e) { throw new InvalidPojoException(e.toString(),e); } return pojo;
使用以下代码为json对象.
(List<ItemCategory>) JsonParserUtil.toPojo(serviceResponse.getStringResponse(),new TypeReference<List<ItemCategory>>(){});
任何指针都会受到赞赏.
提前致谢.
解决方法
@JsonSerialize( include=JsonSerialize.Inclusion.NON_NULL,)
javascript – 如何用JS / PHP解码base64编码的图像? (以前使用Actionscript编码)
private static const BASE64_CHARS:String = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; public static function encodeByteArray(_arg1:ByteArray):String { var _local3:Array; var _local5:uint; var _local6:uint; var _local7:uint; var _local2 = ""; var _local4:Array = new Array(4); _arg1.position = 0; while (_arg1.bytesAvailable > 0) { _local3 = new Array(); _local5 = 0; while ((((_local5 < 3)) && ((_arg1.bytesAvailable > 0)))) { _local3[_local5] = _arg1.readUnsignedByte(); _local5++; }; _local4[0] = ((_local3[0] & 252) >> 2); _local4[1] = (((_local3[0] & 3) << 4) | (_local3[1] >> 4)); _local4[2] = (((_local3[1] & 15) << 2) | (_local3[2] >> 6)); _local4[3] = (_local3[2] & 63); _local6 = _local3.length; while (_local6 < 3) { _local4[(_local6 + 1)] = 64; _local6++; }; _local7 = 0; while (_local7 < _local4.length) { _local2 = (_local2 + BASE64_CHARS.charat(_local4[_local7])); _local7++; }; }; return (_local2); }
现在我正在尝试解码(没有成功)JS / PHP中的字符串并返回图像.
这是Actionscript解码函数:
public static function decodetoByteArray(_arg1:String):ByteArray{ var _local6:uint; var _local7:uint; var _local2:ByteArray = new ByteArray(); var _local3:Array = new Array(4); var _local4:Array = new Array(3); var _local5:uint; while (_local5 < _arg1.length) { _local6 = 0; while ((((_local6 < 4)) && (((_local5 + _local6) < _arg1.length)))) { _local3[_local6] = BASE64_CHARS.indexOf(_arg1.charat((_local5 + _local6))); _local6++; }; _local4[0] = ((_local3[0] << 2) + ((_local3[1] & 48) >> 4)); _local4[1] = (((_local3[1] & 15) << 4) + ((_local3[2] & 60) >> 2)); _local4[2] = (((_local3[2] & 3) << 6) + _local3[3]); _local7 = 0; while (_local7 < _local4.length) { if (_local3[(_local7 + 1)] == 64){ break; }; _local2.writeByte(_local4[_local7]); _local7++; }; _local5 = (_local5 + 4); }; _local2.position = 0; return (_local2); }
我试图将解码Aactionscript函数转换为JS,但我错过了新的ByteArray();我不知道如何管理.
我需要一种方法将编码的图像字符串解码回图像.
这里是一个使用“encodeByteArray”函数编码的图像的base64字符串示例:
sample base64 encoded string
谢谢您的帮助.
解决方法
<img src="data:image/png;base64,ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" />
关于使用jackson和spring-boot将base64编码的JSON解码为POJO的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – 使用jackson对象映射器将JSON数组转换为POJO、asp.net-mvc – 带有Base64编码的JsonResult、Jackson:使用jackson将json字符串响应转换为pojo转换时过滤空值或空值、javascript – 如何用JS / PHP解码base64编码的图像? (以前使用Actionscript编码)等相关内容,可以在本站寻找。
本文标签: