我试图得到一个基于自定义字符串字段的模型列表。在user类中,我要搜索数据库并检索包含特定 role
价值观。
模型类
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String role;
...
}
存储库类
@Repository
public interface UserRepository extends JpaRepository<User, Long>{
List<User> findById(@Param(value = "id") Long id);
List<User> findByRole(@Param(value = "role") String role);
}
服务等级
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getAllUsers() {
return userRepository.findAll();
}
public List<User> findUserById(@PathVariable("id") Long id){
return userRepository.findById(id);
}
public List<User> findUserByRole(String role){
return userRepository.findByRole(role);
}
...
}
控制器类
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
UserService userService;
@GetMapping
public List<User> accessUsers() {
return userService.getAllUsers();
}
@GetMapping("/{id}")
public List<User> findById(@PathVariable("id") Long id){
return userService.findUserById(id);
}
@GetMapping("/{role}")
public List<User> findByRole(@RequestParam(value="role") String role){
return userService.findUserByRole(role);
}
...
}
我提出如下请求(其中role=manager):
GET localhost:8080/api/users/MANAGER
但是,我得到了这个错误。我注意到,如果我尝试基于长id值获取模型,它是有效的,但是每当我尝试使用字符串字段时,它都会给出错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for '/api/users/CHEF': {public java.util.Optional com.cs322.ors.controller.UserController.accessUserInfo(long,org.springframework.security.core.Authentication), public java.util.List com.cs322.ors.controller.UserController.findByRole(java.lang.String)}
我尝试了以下链接,但问题仍然存在:
Spring Boot模糊处理程序
使用spring处理rest应用程序中Map的不明确处理程序方法
1条答案
按热度按时间w9apscun1#
一个朋友帮我解决了这个问题。
在绘制路线图时
GET localhost:8080/api/users/MANAGER
,spring boot不知道我是否在指定GET localhost:8080/api/users/{id}
或者GET localhost:8080/api/users/{role}
. 由于他们有相同的网址,它不能决定两者之间的区别id
以及role
. 为了解决这个问题,我添加了一个更具体的端点,如下所示: