为了账号安全,请及时绑定邮箱和手机立即绑定

在 spring 中将 JSON 数组字段恢复为字节数组

在 spring 中将 JSON 数组字段恢复为字节数组

胡子哥哥 2023-08-09 15:13:39
我是 spring 新手,在这里我发送一个 http 请求,需要将消息传递到服务器。但消息应该作为字节数组发送。我使用以下curl命令。这里传递的消息是“hello”。curl -i -H "Content-type: application/json" -X POST -d '{"message":[72,69,76,76,79]}' http://localhost:8080/json控制器应该监听请求并再次将消息字段恢复为 byte[]。控制器代码:@RequestMapping(value = "/json", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic ResponseEntity<Map<String, Object>> jsonReceiver(@RequestHeader Map<String, String> headers, @RequestBody Map<String, Object> request) {    String bytes = request.get("message").toString();    LOGGER.info("Message: {}", bytes);    Map<String, Object> response = new HashMap<>();    response.put("status-code", "1000");    response.put("success", "true");    HttpHeaders respHeaders = new HttpHeaders();    respHeaders.add("Pragma", "ack");    return new ResponseEntity<Map<String, Object>>(response, respHeaders, HttpStatus.ACCEPTED);}在这里我可以获得字符串形式的输出。但我想把它变成一个字节[]。有什么方法可以从控制器获取字节数组,而不需要读取字符串然后对其进行操作。Message: [72,69,76,76,79]
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

尝试这个:


String message  = "[72,69,76,76,79]";

String[] stringArray = message.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",");

byte[] byteArray = new byte[stringArray.length];


for(int i = 0; i<stringArray.length; i++)

{

    byteArray[i] = (byte) Integer.parseInt(stringArray[i]);

}

首先,转换为字符串数组。然后,您在该数组中进行迭代,并将每个元素转换为 int,然后转换为 byte 并将其分配给字节数组。


查看完整回答
反对 回复 2023-08-09
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

当您获取请求正文时,Map<String, Object>获取字节数组的唯一方法是解析“stringyfied”字节数组并构建结果字节数组。


就像是:


String byteArrayAsStr = request.get("message").toString();


// First get only the "string-numeric" values (storing them into a String[]

String[] byteValues = byteArrayAsStr.substring(1, byteArrayAsStr.length() - 1).split(",");

byte[] messageBytes = new byte[byteValues.length];


// then we store each parsed byte value into our result byte[] (messageBytes)

for (int i=0, len=messageBytes.length; i<len; i++) {

   messageBytes[i] = Byte.parseByte(byteValues[i].trim()); // trim not necessary in your case, as you send your array without spaces after commas 

}

[...]

如果您找不到更好的方法来直接以所需类型获取请求正文(使用适当的 DTO),则可以采用这种方法。


查看完整回答
反对 回复 2023-08-09
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

你可以byte[]这样制作String

byte[] byteArray = bytes.getBytes();


查看完整回答
反对 回复 2023-08-09
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信