这个问题在这里已经有答案了:
使用spring处理rest应用程序中Map的不明确处理程序方法(2个答案)
三个月前关门了。
我是新来的Sping Boot 。我对以下支持按名称获取原始数据的方法有问题:
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class AccountsResource {
private final AccountsService service;
@GetMapping("/accounts/{name}")
public ResponseEntity<?> getByName(@PathVariable String name){
return ResponseEntity.ok(service.getByUsername(name));
}
}
这是我的accountsservice类:
public Accounts getByUsername(String username) {
Optional<Accounts> byUsername = repository.findByUsername(username);
return byUsername.orElseThrow(() -> new RuntimeException("User not found"));
}
这是我的Accounts存储库类:
@Repository
public interface AccountsRepository extends JpaRepository<Accounts, Long> {
@Query(value = "SELECT * FROM accounts where name = ?", nativeQuery = true)
Optional<Accounts> findByUsername(String username);
}
这是我的实体类:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "accounts")
public class Accounts extends BaseEntity {
private String name;
private String website;
private String pContact;
@ManyToOne
@JoinColumn(name="sales_rep_id", referencedColumnName = "id")
private SalesRep sales;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "accounts")
private List<Orders> orders;
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL)
private List<WebEvents> webEvents;
}
当我尝试发送get请求时http://localhost:8081/api/accounts/1,我得到:
{
"timestamp": "2021-02-09T12:36:02.943+00:00",
"status": 500,
"error": "Internal Server Error",
"message": "",
"path": "/api/accounts/1"
}
除了以下例外情况:
java.lang.IllegalStateException: Ambiguous handler methods mapped for '/api/accounts/1': {public org.springframework.http.ResponseEntity com.example.demo.web.rest.AccountsResource.getById(java.lang.Long), public org.springframework.http.ResponseEntity com.example.demo.web.rest.AccountsResource.getByName(java.lang.String)}
我希望在这方面得到任何建议。由于我是新手,我很感谢任何有效的建议和链接。
1条答案
按热度按时间ibrsph3r1#
问题是,您必须使用相同路径的端点,唯一的区别是端点acepts的路径变量的类型,一个需要long,另一个需要字符串,并且因为您使用的是数字spring cant figure调用,如果该数字是long或是带有数字字符的字符串。
应该为两个端点定义不同的路径