简单的应用程序-Application.java
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
简单的界面-ThingApi.java
package hello; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; public interface ThingApi { // get a vendor @RequestMapping(value = "/vendor/{vendorName}", method = RequestMethod.GET) String getContact(@PathVariable String vendorName); }
简单控制器-ThingController.java
package hello; import org.springframework.web.bind.annotation.RestController; @RestController public class ThingController implements ThingApi { @Override public String getContact(String vendorName) { System.out.println("Got: " + vendorName); return "Hello " + vendorName; } }
使用您最喜欢的SpringBoot入门级父级来运行此程序。用GET / vendor / foobar选中它,您将看到:Hello null
Spring认为’vendorName’是一个查询参数!
如果将控制器替换为未实现接口的版本,并将注释移入其中,如下所示:
package hello; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class ThingController { @RequestMapping(value = "/vendor/{vendorName}", method = RequestMethod.GET) public String getContact(@PathVariable String vendorName) { System.out.println("Got: " + vendorName); return "Hello " + vendorName; } }
工作正常。
这是功能吗?还是错误?
您只是错过@PathVariable了工具
@PathVariable
@Override public String getContact(@PathVariable String vendorName) { System.out.println("Got: " + vendorName); return "Hello " + vendorName; }