如何用@pathvariable参数Mapresponseentity< >getbyname方法?

nkhmeac6  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(375)

这个问题在这里已经有答案了

使用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)}

我希望在这方面得到任何建议。由于我是新手,我很感谢任何有效的建议和链接。

ibrsph3r

ibrsph3r1#

问题是,您必须使用相同路径的端点,唯一的区别是端点acepts的路径变量的类型,一个需要long,另一个需要字符串,并且因为您使用的是数字spring cant figure调用,如果该数字是long或是带有数字字符的字符串。
应该为两个端点定义不同的路径

相关问题