#rest #web-services #jakarta-ee #jax-rs #java-ee-8
#rest #веб-сервисы #джакарта-ee #jax-rs #java-ee-8
Вопрос:
Мне поручено создать простой веб-API с использованием JAVA EE, и я не могу использовать другие внешние фреймворки, такие как Spring Boot.
Я заставил запросы get работать, что было просто, однако, когда я пытаюсь вернуть JSON в api, все, что я вижу, это {} в postman или браузере, даже если я создал пользователя.
вот мой текущий код
package ab.service;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.Application;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@Path("/MyRestService")
@ApplicationPath("resources")
public class RestService extends Application {
// http://localhosts:8080/BankTaskV1/ressources/MyRestService/sayHello
@GET
@Path("/sayHello")
public String getHelloMsg() {
return "Hello World";
}
@GET
@Path("/echo")
public Response getEchoMsg(@QueryParam("message") String msg) {
return Response.ok("you message was: " msg).build();
}
@GET
@Path("/User")
public Response getUser() {
// Gson gson = new Gson();
User user = new User(1, "Ahmad");
return Response.status(Response.Status.OK).entity(user).type(MediaType.APPLICATION_JSON).build();
// return gson.toJson(user);
}
@POST
@Path("/CreateUser")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public void createUser(UserRequest requestBody) {
System.out.println("create ran");
System.out.println(requestBody.UserName);
}
}
как вы можете видеть в конечной точке пользователя, я использовал GSON для преобразования пользовательского объекта в строку json, и это сработало, однако я прочитал в Интернете, что он должен работать без него, если я сделал это, вернув объект, который называется POJO?
но это просто дает мне пустой {}
кроме того, в конечной точке CreateUser я настроил его на использование json и предоставил ему тело запроса с классом, который я определил. но когда я пытаюсь напечатать имя пользователя, оно выдает мне null, и вывод системы create ran показывает, что функция выполнена.
вот мой пользовательский класс
package ab.service;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getId() {
return id;
}
void setId(int id) {
this.id = id;
}
}
и мой класс userrequest
package ab.service;
import javax.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlElement;
@XmlRootElement
public class UserRequest {
@XmlElement
String UserName;
@XmlElement
int Id;
}
Комментарии:
1. Сделайте ваши методы получения / установки общедоступными
2. да, это сработало, я застрял на пару часов. спасибо @PaulSamsotha