Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为具有Path变量的其他URL选择的默认请求映射方法_Java_Spring_Spring Mvc_Request Mapping - Fatal编程技术网

Java 为具有Path变量的其他URL选择的默认请求映射方法

Java 为具有Path变量的其他URL选择的默认请求映射方法,java,spring,spring-mvc,request-mapping,Java,Spring,Spring Mvc,Request Mapping,我有一个@RestController,如下所示。应该为URL选择getTrainlong方法http://localhost:8080/trains/1 但事实上,它正在加速降雨。其他URL工作正常。我不确定我是否遗漏了什么或不理解什么。我也看了一下,这有点帮助 要求: 1. /列车[POST]-添加列车 2. /火车-把所有的火车都开走 3. /火车/{trainId}-按id获取火车 @RestController public class TrainController { @

我有一个@RestController,如下所示。应该为URL选择getTrainlong方法http://localhost:8080/trains/1 但事实上,它正在加速降雨。其他URL工作正常。我不确定我是否遗漏了什么或不理解什么。我也看了一下,这有点帮助

要求: 1. /列车[POST]-添加列车 2. /火车-把所有的火车都开走 3. /火车/{trainId}-按id获取火车

@RestController
public class TrainController {

    @Autowired
    private TrainService trainService;

    @RequestMapping(headers = { "Accept=application/json" }, method = RequestMethod.POST)
    public TrainDto addTrain(@RequestBody TrainDto trainDto) throws Exception {

        return trainService.addTrain(trainDto);
    }

    @RequestMapping(method = RequestMethod.GET)
    public List<TrainDto> getTrains() throws Exception {

        return trainService.getTrains();
    }

    @RequestMapping(value = "{trainId:\\d+}", method = RequestMethod.GET)
    public TrainDto getTrain(@PathVariable("trainId") long trainId) throws Exception {

        return trainService.getTrain(trainId);
    }
}
这会奏效的。大括号内的值(即trainId)应映射到PathVariable。

您应将value=添加到映射请求中。看看这是否有效

@RestController public class TrainController {

    @Autowired
    private TrainService trainService;

    @RequestMapping(value = "/trains",headers = { "Accept=application/json" }, method = RequestMethod.POST)
    public TrainDto addTrain(@RequestBody TrainDto trainDto) throws Exception {

        return trainService.addTrain(trainDto);
    }

    @RequestMapping(value = "/trains",method = RequestMethod.GET)
    public List<TrainDto> getTrains() throws Exception {

        return trainService.getTrains();
    }

    @RequestMapping(value = "/trains/{trainId}", method = RequestMethod.GET)
    public TrainDto getTrain(@PathVariable("trainId") long trainId) throws Exception {

        return trainService.getTrain(trainId);
    }

}
或者你可以这样做

@RestController
@RequestMapping(TrainController.REQUEST_MAPPING_URL)
public class TrainController {

       public static final String REQUEST_MAPPING_URL = "/trains";

        @Autowired
        private TrainService trainService;

        @RequestMapping(value = "/",headers = { "Accept=application/json" }, method = RequestMethod.POST)
        public TrainDto addTrain(@RequestBody TrainDto trainDto) throws Exception {
            return trainService.addTrain(trainDto);
        }

        @RequestMapping(value = "/",method = RequestMethod.GET)
        public List<TrainDto> getTrains() throws Exception {
            return trainService.getTrains();
        }

        @RequestMapping(value = "/{trainId}", method = RequestMethod.GET)
        public TrainDto getTrain(@PathVariable("trainId") long trainId) throws Exception {
            return trainService.getTrain(trainId);
        }

    }

您是否尝试过/{trainId:\\d+}附加/?嗨,这是一个火车应用程序。所以URL已经有了指向它的火车。这样做会导致/trains/trains/{trainId}我无法在代码中看到它。你把它放在哪里?哇,我试过了,它成功了。你能解释一下为什么它没有将应用程序名作为根url的一部分附加在后面吗?这两种方法都有效。我忘了,对于Spring启动应用程序,上下文路径不是应用程序的默认路径name@FourtyTwo然后你可以接受正确的答案。HTTP方法参数没有默认值–因此如果我们不指定值,它将映射到任何HTTP请求。
@RestController
@RequestMapping(TrainController.REQUEST_MAPPING_URL)
public class TrainController {

       public static final String REQUEST_MAPPING_URL = "/trains";

        @Autowired
        private TrainService trainService;

        @RequestMapping(value = "/",headers = { "Accept=application/json" }, method = RequestMethod.POST)
        public TrainDto addTrain(@RequestBody TrainDto trainDto) throws Exception {
            return trainService.addTrain(trainDto);
        }

        @RequestMapping(value = "/",method = RequestMethod.GET)
        public List<TrainDto> getTrains() throws Exception {
            return trainService.getTrains();
        }

        @RequestMapping(value = "/{trainId}", method = RequestMethod.GET)
        public TrainDto getTrain(@PathVariable("trainId") long trainId) throws Exception {
            return trainService.getTrain(trainId);
        }

    }