#java #c #rest #tomcat #microcontroller
#java #c #rest #tomcat #микроконтроллер
Вопрос:
У меня есть веб-служба REST, которая следует за Spring MVC и развернута с помощью Tomcat-7.0.50. Теперь я хочу вызвать эту службу через встроенный код в устройстве micro controller. GSM-модем размещен вместе с устройством для установления подключения через GPRS.
Вот пример кода на языке Си, используемого для вызова службы REST, развернутой на сервере tomcat.
char* connect_GPRS(void)
{
int cnt=0;
printf("connecting GPRS");
send_command("ATr");
send_command("AT CIPCLOSEr");
send_command("AT CIPSHUTr");
send_command("AT CIPCSGP=1,"dialoguomlab"r");
send_command("AT CGATT=1r");
send_command("AT CIPMODE=0r");
send_command("AT CIPSTART="TCP","10.8.155.16","8080"r"); // connect TCP
_delay_ms(1000);
send_command("AT CIPSENDr");
while ((strchr(modem_buf,'>')==NULL)amp;amp;(cnt<60)) //wait
{_delay_ms(100); cnt ; }
clr_buf();
// send web request to the webserver
fprintf(amp;modem,"POST /MyService/addnums HTTP/1.1rn
Host: 10.8.155.16:8080rn
Content-Type: text/htmlrn
Content-length:6rnrn
10,100
%c",26);
while(modem_buf[0]==0); // wait for any data to come
_delay_ms(5000);
printf(modem_buf);
send_command("AT CIPCLOSEr");
_delay_ms(5000);
printf(modem_buf); // check if anything in the buffer
return modem_buf;
}
Веб-служба размещена по URL-адресу http://10.8.155.16:8080/MyService
(ip 10.8.155.16 является только образцом, а не фактическим, мы можем подключить сервер tomcat)
Вот код службы REST.
@RequestMapping(value = "/addnums", method = RequestMethod.POST, headers = "Accept=text/html")
public @ResponseBody
String addNumbers(@RequestBody String request) {
try{
System.out.println("just enter to addnums.... " request);
int sum = 0;
List<String> values = Arrays.asList(request.split(","));
for (String s : values) {
sum = sum Integer.parseInt(s);
}
String sumAsString = Integer.toString(sum);
System.out.println("going to send the response");
return sumAsString;
}catch(Exception e){
System.out.println("Exception occured while processing..." e.getMessage());
return "Error";
}
}
Но при вызове для этого мы получаем ошибку
HTTP/1.1 505 HTTP Version Not Supported Server: Apache-Coyote/1.1 Date: Fri, 27 Jun 2014 04:45:27 GMT Connection: close
Пожалуйста, помогите мне определить корневой курс.
Комментарии:
1. что находится в журналах сервера?
2. @guido Я не смог ничего найти в журналах сервера tomcat.
3. Посмотрите на журнал доступа, он покажет запрос, полученный tomcat
4. @guido Я не смог найти ничего с 505 в журнале доступа, поскольку я запускал сервер через eclipse, поскольку мы вносим частые изменения (искал файлы в eclipse, но не нашел) Мы отслеживали запрос через wireshark, и в нем говорится, что POST / MyService / addnums HTTP / 1.1 Продолжение или трафик, отличный от HTTP
5. я могу только догадываться, что это какой-то непечатаемый символ / пробел в первой строке, из-за которого tomcat не нравится запрос. или это может быть связано с сохранением работоспособности; это первый запрос или есть другие, не показанные в коде c?
Ответ №1:
Мы смогли найти ответ на мой собственный вопрос и опубликовать, поскольку это может помочь кому-то другому.
Мы смогли перехватить запрос через отдельную программу TCP-сервера, и во время отладки строки запроса мы увидели, что устройство добавляет еще один r перед каждым n . тогда строка имеет r r n для всех таких случаев. это стало причиной того, что программа не работала. поэтому, когда измените строку так, как это, удалив r, проблема была решена.
// send web request to the webserver
fprintf(amp;modem,"POST /MyService/addnums HTTP/1.1n
Host: 10.8.155.16:8080n
Content-Type: text/htmln
Content-length:6nn
10,100
%c",26);