首页 > 解决方案 > Springboot REST API 没有通过简单的 GET 请求返回 JSON

问题描述

我是 Java 和 Springboot 的新手。尝试使用一个参数 terminalId 来实现一个简单的 get 请求,它是一个字符串。

Findall() 端点工作正常,但是在实现与字符串匹配的端点时,我遇到了麻烦。

控制器

@RestController
@RequestMapping("/api/private/v1")
public class TransactionController {

    private TransactionService<TransactionResponse> transactionService;

    public TransactionController(TransactionyService<TransactionResponse> transactionService) {
        this.transactionService = transactionService;
    }

    @CrossOrigin(origins = "http://localhost:4200")
    @GetMapping(value = "/transactions")
    public List<TransactionResponse> retrieveTransactions(){
        return transactionService.findAll();
    }

    @CrossOrigin(origins = "http://localhost:4200")
    @GetMapping(value = "transactions/{terminalId}")
    public List<TransactionResponse> retrieveByTerminalId(
            @PathVariable String terminalId) {
        if (terminalId != null) {
            return transactionService.findByTerminalId((terminalId));
//            @ResponseStatus(HttpStatus.OK)
        } else {
            return null;
        }

    }
}

服务


    List<T> findAll();

    List<T> findByTerminalId(String terminalId);

    T save(T object);
}

服务

@Service
public class TransactionServiceImpl implements TransactionService<TransactionResponse> {

    protected List<TransactionResponse> transactionResponseList = new ArrayList<>();

    @Override
    public List<TransactionResponse> findAll() {
        return transactionResponseList;
    }

    @Override
    public List<TransactioResponse> findByTerminalId(String terminalId) {
        return transactionResponseList;
    }

    @Override
    public TransactionResponse save(TransactionResponse object) {

        if(null != object){
            transactionResponseList.add(object);
        }
        return object;
    }
}

引导组件

@Component
public class TransactionBootstrap implements CommandLineRunner {

    private TransactionService<TransactionResponse> transactionService;

    public TransactionBootstrap(TransactionService<TransactionResponse> transactionService) {
        this.transactionService = transactionService;
    }

    @Override
    public void run(String... args) throws Exception {
        loadData();
    }

    private void loadData() {

        TransactionResponse response1 = new TransactionResponse("111", LocalDateTime.now(), LocalDateTime.now());

        TransactionResponse response2 = new TransactionResponse("222", LocalDateTime.now(), LocalDateTime.now(),);



        transactionService.save(response1);
        transactionService.save(response2);

    }
}

我正在使用“localhost:8080/api/private/v1/transactions/111”网址

我得到一个白标签错误页面。这是 JPA 问题吗?这是 @RequestParams 与 @PathVariable 的问题吗?

我完全迷路了。

标签: javaspring-bootapirest

解决方案


您在 @GetMapping(value = "transactions/{terminalId}") 中错过了 /

写@GetMapping(value = "/transactions/{terminalId}")


推荐阅读