Java 将bytearray从AS3发送到SpringMVCServlet

Java 将bytearray从AS3发送到SpringMVCServlet,java,actionscript-3,spring-mvc,post,bytearray,Java,Actionscript 3,Spring Mvc,Post,Bytearray,我需要从Flex向SpringMVCServlet发送一个ByteArray,但它不起作用。我录制了一个音频样本,在AS3中转换成bytearray并发送到SpringMVCServlet,但接收Java的数据为空 AS3代码: var flacCodec:Object; flacCodec = (new cmodule.flac.CLibInit).init(); bytes.position = 0; var rawData: ByteArra

我需要从Flex向SpringMVCServlet发送一个ByteArray,但它不起作用。我录制了一个音频样本,在AS3中转换成bytearray并发送到SpringMVCServlet,但接收Java的数据为空

AS3代码:

var flacCodec:Object;
        flacCodec = (new cmodule.flac.CLibInit).init();
        bytes.position = 0;
        var rawData: ByteArray = new ByteArray();
        var flacData : ByteArray = new ByteArray();
        rawData = convert32to16(bytes);
        flacData.endian = Endian.LITTLE_ENDIAN;
        flacCodec.encode(   encodingCompleteHandler, 
            encodingProgressHandler, 
            rawData, 
            flacData, 
            rawData.length, 
            30);            
        function encodingCompleteHandler(event:*):void {            
            var PATH:String = "http://localhost:8080/myproject/speechRecognition/";
            var urlRequest:URLRequest = new URLRequest(PATH);
            var urlLoader:URLLoader = new URLLoader();
            urlRequest.contentType = "audio/x-flac; rate=44000";
            var variables:URLVariables = new URLVariables();
            variables.contents = flacData;
            variables.filename = "test";
            urlRequest.data = variables;
            urlRequest.method = URLRequestMethod.POST;

            urlLoader.dataFormat = URLLoaderDataFormat.TEXT; // default
            urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
            urlLoader.addEventListener(ErrorEvent.ERROR, urlLoader_error);
            urlLoader.load(urlRequest);
    @RequestMapping(value = "/",method = RequestMethod.POST)
public String getSpeechRecognition(ServletRequest req) {
    String filename = req.getParameter("filename");
    byte[] contents = req.getParameter("contents").getBytes();
    request= new SpeechRecognitionRequestVO();
    request.setData(contents);
    try {
        response=((SpeechRecognitionResponseVO) getSpeechRecognitionService().getSpeechRecognition(request));
    } catch (Exception e){
        logger.error(e.toString());
    }
    return "views/sequence";
}
JAVA代码:

var flacCodec:Object;
        flacCodec = (new cmodule.flac.CLibInit).init();
        bytes.position = 0;
        var rawData: ByteArray = new ByteArray();
        var flacData : ByteArray = new ByteArray();
        rawData = convert32to16(bytes);
        flacData.endian = Endian.LITTLE_ENDIAN;
        flacCodec.encode(   encodingCompleteHandler, 
            encodingProgressHandler, 
            rawData, 
            flacData, 
            rawData.length, 
            30);            
        function encodingCompleteHandler(event:*):void {            
            var PATH:String = "http://localhost:8080/myproject/speechRecognition/";
            var urlRequest:URLRequest = new URLRequest(PATH);
            var urlLoader:URLLoader = new URLLoader();
            urlRequest.contentType = "audio/x-flac; rate=44000";
            var variables:URLVariables = new URLVariables();
            variables.contents = flacData;
            variables.filename = "test";
            urlRequest.data = variables;
            urlRequest.method = URLRequestMethod.POST;

            urlLoader.dataFormat = URLLoaderDataFormat.TEXT; // default
            urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
            urlLoader.addEventListener(ErrorEvent.ERROR, urlLoader_error);
            urlLoader.load(urlRequest);
    @RequestMapping(value = "/",method = RequestMethod.POST)
public String getSpeechRecognition(ServletRequest req) {
    String filename = req.getParameter("filename");
    byte[] contents = req.getParameter("contents").getBytes();
    request= new SpeechRecognitionRequestVO();
    request.setData(contents);
    try {
        response=((SpeechRecognitionResponseVO) getSpeechRecognitionService().getSpeechRecognition(request));
    } catch (Exception e){
        logger.error(e.toString());
    }
    return "views/sequence";
}
我在此参数中接收空值:

req.getParameter("contents")

有人知道发生了什么吗?

这将以二进制形式发送数据:

        var header : URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");

        var url_request : URLRequest = new URLRequest();
        url_request.url = _url;
        url_request.contentType = "binary/octet-stream";
        url_request.method = URLRequestMethod.POST;
        url_request.data = byteArray;
        url_request.requestHeaders.push(header);

        var loader : URLLoader = new URLLoader();
        loader.addEventListener(Event.COMPLETE, loaderCompleteHandler, false, 0, true);
        loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler, false, 0, true);
        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler, false, 0, true);
        loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);
        loader.load(url_request);

将loader.dataFormat设置为URLLoaderDataFormat.BINARY、TEXT、VARIABLES是针对您在事件中获得的响应数据。COMPLETE

我不知道
actionscript
及其API,但我可以告诉您:
actionscript
中的内存
ByteArray
字节[]
Java
中的
。您不应该更好地使用urloaderdataformat.BINARY吗?它有什么变化吗?我之所以使用这种结构,是因为我在这个示例中看到:我使用了URLLoaderDataFormat.BINARY,但它不起作用。Thanks我认为这是SpringMVC的问题,因为当我使用GET而不是POST时,我收到了参数。但我不确定这是否正确。知道吗?我现在的问题是,我在服务器上从哪里接收这些数据。这是我的方法:@RequestMapping(value=“/”,method=RequestMethod.POST)公共字符串getSpeechRecognition(@RequestBody byte[]body){}。但是,我发送的数据与接收的数据不同。