私は以下のようにいくつかのコードを使おうとしました:
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Brand getBrand(@PathVariable Integer id) {
return brandService.getOne(id);
}
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
public List<Brand> getBrand(@PathVariable String name) {
return brandService.getSome(name);
}
しかし、私はこのようなエラーが発生しました、どうすればよいですか?
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/api/brand/1': {public java.util.List com.zangland.controller.BrandController.getBrand(java.lang.String), public com.zangland.entity.Brand com.zangland.controller.BrandController.getBrand(java.lang.Integer)}
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:375) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
Springは、マッピングがあいまいなため、リクエストGET http://localhost:8080/api/brand/1
がによって処理されるのgetBrand(Integer)
か、によって処理されるのかを区別できませんgetBrand(String)
。
getBrand(String)
メソッドのクエリパラメータを使用してみてください。クエリを実行しているので、より適切なようです。
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Brand getBrand(@PathVariable Integer id) {
return brandService.getOne(id);
}
@RequestMapping(method = RequestMethod.GET)
public List<Brand> getBrand(@RequestParam(value="name") String name) {
return brandService.getSome(name);
}
上記のアプローチを使用する:
GET http://localhost:8080/api/brand/1
はによって処理されgetBrand(Integer)
ます。GET http://localhost:8080/api/brand?name=nike
はによって処理されgetBrand(String)
ます。ヒント:一般的な方法として、リソースのコレクションには複数形の名詞を使用することをお勧めします。したがって、の代わりに/brand
、を使用します/brands
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加