#java #web-services #grails #bytearray #apache-commons-httpclient
#java #веб-сервисы #grails #массивы #apache-commons-httpclient
Вопрос:
Я делаю POST
запрос к службе и отправляю файл вместе. В ответ на этот POST
запрос служба отвечает ответом a byte[]
. Как я могу получить доступ к возврату byte[]
в моем коде?
Вот как я делаю POST
в своем клиентском коде, используя apache-commons-httpclient
public void sendFile(InputStream is) throws Exception {
HttpClient client = new HttpClient();
PostMethod method = new PostMethod("http://service:8080/myservice/request/testimage");
ByteArrayPartSource bpa = new ByteArrayPartSource("s.jpg",IOUtils.toByteArray(is));
Part[] parts = new Part[] {
new FilePart("myFile", bpa)
};
method.setRequestEntity(
new MultipartRequestEntity(parts, method.getParams())
);
client.executeMethod(method);
}
Служба также написана мной, и я контролирую ее. Он написан в grails и выглядит следующим образом:
//Domain
class Image {
byte[] myFile
static constraints = {
myFile maxSize: 1024 * 1024 * 2
}
}
//Controller
def testimage() {
def img = new Image(params)
byte[] fileBytes = service.performChangesToFile(img.myFile)
render fileBytes
}
Комментарии:
1.
method.responseBody
должен вернутьсяbyte[]
Ответ №1:
Используйте кодировку Base64 для отправки данных ответа вашему клиенту.
Ваш клиент получает строку Base64 и декодирует ее в массив байтов.