Ресурс JAX-RS возвращает HTTP/1.1 404 Not Found после миграции в Джакарту

Я обновил «старое» (работающее) приложение EE с JSON, которое работало с «javax». Теперь на EE 10.x и Джакарте.

implementation("com.google.code.gson:gson:2.11.0")

С использованием:

import com.bewherewhen.ejb.UsersJSONEJB;

import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Named
@Path("/")
public class UsersJSONController {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/get-all-users")
    public Response getAllUsersJSON() {
        LOGGER.info(">>>>> UsersJSONController getAllUsersJSON .....");

        String json = usersJSONEJB.getAllUsersJSON();
        LOGGER.info(">>>>> 1.6 UsersJSONEJB getAllUsersJSON = {}", json);

        return Response.ok(json, MediaType.APPLICATION_JSON).build();
    }
}

Если я запущу «curl», я получу:

curl -v http://127.0.0.1:8080/get-all-users/
*   Trying 127.0.0.1:8080...
* Connected to 127.0.0.1 (127.0.0.1) port 8080
> GET /get-all-users/ HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/8.7.1
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 404 Not Found
< Connection: keep-alive
< Content-Length: 74
< Content-Type: text/html
< Date: Sun, 04 Aug 2024 17:07:07 GMT
< 
* Connection #0 to host 127.0.0.1 left intact
<html><head><title>Error</title></head><body>404 - Not Found</body></html>

С использованием:

  • macOS Сонома 14.6
  • гсон 2.11.0
  • локон 8.9.1
  • Дистрибутив WildFly - 33.0.0.Final
  • Джакарта EE 10.0.0 и 11.0.0-M4
  • JDK 21.0.2
  • Котлин 2.0.0
  • Мохарра 4.1.0

ТИА.

Не могли бы вы добавить раздел импорта в свой образец, пожалуйста?

Laurent Schoelens 06.08.2024 09:33

@Laurent Schoelens - Добавлен мой импорт.

NOTiFY 06.08.2024 19:02

У вас есть Application класс? Есть ли у него правильная @ApplicationPath аннотация? Вы удалили все зависимости javax, чтобы случайно их не использовать? Мне кажется, если приложение раньше работало, значит оно неправильно настроено для Джакарты.

Paul Samsotha 06.08.2024 19:09

@Paul Samsotha - некоторое время назад я удалил весь Javax, когда перешел на EE 9 (без REST). Похоже, я не добавил: @ApplicationPath("notifywell") публичный класс ApplicationConfig расширяет приложение { public ApplicationConfig() { } }. ТИА

NOTiFY 06.08.2024 19:56

Возможно, причиной ошибки является косая черта. Вы пытались свернуть /get-all-users без / в конце URL-адреса (то есть не /get-all-users/)?

Laurent Schoelens 06.08.2024 20:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я вижу, у вас есть проблема 404 Not Found error. Эта проблема связана с неправильным отображением пути вашего UsersJSONController class в вашем приложении.

Попробуйте сделать так:

@Named
@Path("/")
public class UsersJSONController {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("get-all-users")
    public Response getAllUsersJSON() {
        LOGGER.info(">>>>> UsersJSONController getAllUsersJSON .....");

        String json = usersJSONEJB.getAllUsersJSON();
        LOGGER.info(">>>>> 1.6 UsersJSONEJB getAllUsersJSON = {}", json);

        return Response.ok(json, MediaType.APPLICATION_JSON).build();
    }
}

Я удалил / в @Path аннотации.

Затем попробуйте команду cmd: curl -v http://127.0.0.1:8080/get-all-users/

он должен работать.

P.s. Если вы используете дескриптор развертывания, например web.xml, убедитесь, что он правильно настроен для сопоставления конечных точек REST.

«Я удалил аннотацию / в @Path» — никакой разницы. «HTTP/1.1 404 не найден».

NOTiFY 05.08.2024 11:40

@NOTiFY у тебя есть web.xm? правильно ли он настроен?

Zufar Sunagatov 05.08.2024 12:25
Ответ принят как подходящий

@Paul Samsotha - Спасибо за ваш пост, он заставил меня взглянуть на мой старый код Javax.

Добавлен:

package com.bewherewhen.webservices;

import jakarta.faces.application.Application;
import jakarta.ws.rs.ApplicationPath;

@ApplicationPath("beWhereWhen")
abstract class ApplicationConfig extends Application {
    public ApplicationConfig() {
    }
}

Бегать:

curl -v http://localhost:8080/BeWhereWhen/beWhereWhen/get-all-users/

Дает:

* Host localhost:8080 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:8080...
* connect to ::1 port 8080 from ::1 port 63674 failed: Connection refused
*   Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080
> GET /BeWhereWhen/beWhereWhen/get-all-users/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/8.7.1
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/json
< Content-Length: 4
< Date: Tue, 06 Aug 2024 21:31:47 GMT
< 
* Connection #0 to host localhost left intact

Другие вопросы по теме