LoginSignup
kotokona48
@kotokona48

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

APIのリクエストが404になってしまう

解決したいこと

APIのリクエストが404になってしまう

例)
springbootでAPIを作成しています。
jsonを受け取る→DBで検索取得→レスポンスを返すような流れです。
コントローラーで/userを定義しており、以下のcurl文を投げたのですが404 not foundが返却されている状態です。
curl -X POST http://localhost:8081/user -H "Content-Type: application/json" -d '{"id": 1}'
ポートは8081に変更しております。よろしくお願いいたします。

発生している問題・エラー

{"timestamp":"2024-03-15T01:48:57.097+00:00","status":404,"error":"Not Found","trace":"org.springframework.web.servlet.resource.NoResourceFoundException: No static resource 

該当するソースコード

//コントローラー
@RestController
public class UserController {
    @Autowired
    private userService userService;

    @PostMapping("/user")
    public ResponseEntity<UserResponse> getUserById(@RequestBody UserRequest request) {
        Long id = request.getId();

        User user = userService.getUserById(id);
        if (user != null) {
            UserResponse userResponse = new UserResponse();
            userResponse.setId((long) user.getId());
            userResponse.setUsername(user.getItemName());
            userResponse.setEmail("");
            return ResponseEntity.ok(userResponse);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}
//サービス
@Service
public class userService {

    @Autowired
    UserMapper userMapper;

    public  User getUserById(Long id) {

        User userEntity = userMapper.getUserById(id);
        return userEntity;
    }

}
0

2Answer

404 応答が返ってくるということは、名前解決はできてクライアントからの要求はサーバーに届いていて、サーバーで url に指定されているリソースを探したが見つからなかったということです。原因はほとんどが指定した url が間違っているということです。なのでそこを調べてください。できれば質問する前に。

間違いには、単純なスペルミス、相対パスの間違い、ルーティングの間違い、要求するサーバーの間違いなどがあります。ほとんどは質問者さんでないと分からないことです。

2

リクエストが404 Not Foundで返ってくる原因はいくつか考えられますが、提示された情報に基づいて考えられる可能性を挙げてみます。

  1. アプリケーションのポート設定: アプリケーションを8081ポートで実行していることを確認してください。Spring Bootのデフォルトポートは8080ですが、application.propertiesapplication.ymlファイルでserver.port=8081と設定してポートを変更している必要があります。

  2. コントローラーのスキャン: Spring Bootは、アプリケーション起動時に@RestControllerアノテーションがついているクラスをスキャンして自動的に登録します。しかし、このクラスがスキャンの対象外になっている場合、期待通りに動作しません。@SpringBootApplicationアノテーションがついているクラス(アプリケーションのエントリポイント)がこのコントローラーと同じパッケージか、もしくは親パッケージに存在することを確認してください。

  3. コンテキストパスの問題: アプリケーションにコンテキストパスが設定されている場合(例えばserver.servlet.context-path=/api)、実際のエンドポイントはコンテキストパスを含めた形(例: http://localhost:8081/api/user)になります。application.propertiesapplication.ymlを確認して、もしコンテキストパスが設定されているなら、それをリクエストURLに含めているか確認してください。

1

Your answer might help someone💌