Я обновил «старое» (работающее) приложение 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>
С использованием:
ТИА.
@Laurent Schoelens - Добавлен мой импорт.
У вас есть Application
класс? Есть ли у него правильная @ApplicationPath
аннотация? Вы удалили все зависимости javax
, чтобы случайно их не использовать? Мне кажется, если приложение раньше работало, значит оно неправильно настроено для Джакарты.
@Paul Samsotha - некоторое время назад я удалил весь Javax, когда перешел на EE 9 (без REST). Похоже, я не добавил: @ApplicationPath("notifywell") публичный класс ApplicationConfig расширяет приложение { public ApplicationConfig() { } }. ТИА
Возможно, причиной ошибки является косая черта. Вы пытались свернуть /get-all-users
без /
в конце URL-адреса (то есть не /get-all-users/
)?
Я вижу, у вас есть проблема 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 у тебя есть web.xm? правильно ли он настроен?
@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
Не могли бы вы добавить раздел импорта в свой образец, пожалуйста?