Post получает данные из тела запроса и возвращает json Jakarta.ws.rs

#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