в чем причина java.lang.StringIndexOutOfBoundsException: строковый индекс вне диапазона: 1 в этом упрощенном примере служб Rest?

#java #rest

#java #остальное

Вопрос:

curl -X ПОЛУЧАЕТ http://localhost:8080/julian/resources/MyRestService/convert/222

Сервер GlassFish с открытым исходным кодом версии 5.1.0 — отчет об ошибке

Статус HTTP 500 — внутренняя ошибка сервера


введите отчет об исключении

ошибка внутреннего сервера

описание Сервер столкнулся с внутренней ошибкой, которая не позволила ему выполнить этот запрос.

исключение

javax.servlet.Исключение ServletException: java.lang.StringIndexOutOfBoundsException: строковый индекс вне диапазона: 1

основная причина

java.lang.StringIndexOutOfBoundsException: строковый индекс вне диапазона: 1

обратите внимание, что полные трассировки стека исключения и его первопричины доступны в журналах GlassFish Server с открытым исходным кодом версии 5.1.0.


Сервер GlassFish с открытым исходным кодом версии 5.1.0

(база)

 package book.jakarta.julian;

import javax.websocket.server.PathParam;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
/**
 * 
 * Rest Web Service
 *
 */
@ApplicationPath("/resources")
@Path("MyRestService")
public class Julian  extends Application {
        
    // http://localhost:8080/julian/resources/MyRestService/convert/0123
    @GET
    @Produces("text/plain") 
    @Path("convert/{inNum : .*}")
            
    public String add(
            @PathParam("inNum") String inNum) {
        
          // get first digit ignore rest 
          int intemp = Integer.parseInt(inNum.substring(0, 1));
            
          return ""   (intemp   3) ;
      }
}
 

Комментарии:

1. верните число, чтобы сначала увидеть его значение, кажется, это пустая строка.

2. Вы правы с этим пересмотренным кодом, возвращаемое значение пустое, так почему же значения / 0123 не подобраны? // curl -X GET localhost:8080/julian/resources/MyRestService/convert/0123 @GET @Produce(«текст / обычный») @Path(«преобразовать /{inNum : .*}») общедоступная строка add( @PathParam(«inNum») Строка inNum) { return «» Бесчисленное количество; } }

3. Чего вы пытаетесь достичь, используя это регулярное выражение {inNum : .*}

4. Измените свое регулярное выражение на «convert/{inNum: . }»

5. Холодно, вы отвечаете на свой вопрос. Итак, чтобы помочь всем, у кого возникнут проблемы в будущем.