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

我是 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)

@ResponseBody

public 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]


胡子哥哥
浏览 156回答 3
3回答

潇湘沐

尝试这个:String message&nbsp; = "[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++){&nbsp; &nbsp; byteArray[i] = (byte) Integer.parseInt(stringArray[i]);}首先,转换为字符串数组。然后,您在该数组中进行迭代,并将每个元素转换为 int,然后转换为 byte 并将其分配给字节数组。

扬帆大鱼

当您获取请求正文时,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++) {&nbsp; &nbsp;messageBytes[i] = Byte.parseByte(byteValues[i].trim()); // trim not necessary in your case, as you send your array without spaces after commas&nbsp;}[...]如果您找不到更好的方法来直接以所需类型获取请求正文(使用适当的 DTO),则可以采用这种方法。

拉莫斯之舞

你可以byte[]这样制作String:byte[]&nbsp;byteArray&nbsp;=&nbsp;bytes.getBytes();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java