我的任务是使用JAVA EE创建一个简单的Web api,并且无法使用其他外部框架,例如Spring Boot。
我得到的get请求很简单,但是,当我尝试将JSON返回给api时,即使创建了用户,我在邮递员或浏览器中看到的只是{}。
这是我当前的代码
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)来实现该功能,那么如果没有它,它应该可以工作? / p>
但这只是给我一个空的{}
此外,在端点CreateUser中,我将其设置为使用json,并为其提供了一个具有我定义的类的请求正文。但是当我尝试打印用户名时,它为我提供了null,并且创建运行系统输出显示该函数已运行。
这是我的用户类
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;
}