问题描述
我正在尝试使用Jersey制作CRUD RESTful Web服务,但是客户端遇到了麻烦。我使用不带客户端的Advanced Rest Client chrome应用程序测试了我的项目,并且功能还不错,但是当我尝试为其实现客户端时,我遇到了两个主要问题,它们是:
- 当我尝试实现“发布”功能或试图实现“获取”功能时(在获取功能中,我希望所有现有员工数据都将被打印)。处理过帐请求后,奇怪的是确实添加了员工数据,但是在控制台中却没有响应错误。这是错误消息: 2020年11月5日12:03:52 PM org.eclipse.yasson.internal.Unmarshaller deserializeItem 严重:无法将JSON数组反序列化为:com.sun.research.ws.wadl.Response类 线程“主”中的异常javax.ws.rs.client.ResponseProcessingException:javax.json.bind.JsonbException:无法将JSON数组反序列化为:com.sun.research.ws.wadl.Response 类
- 当我尝试实现“放置”功能时,我想做的就是发送一个JAXB可以处理并添加员工数据的员工对象。我在这里遇到的错误是: 线程“主”中的异常javax.ws.rs.InternalServerErrorException:HTTP 500内部服务器错误。由以下原因引起:javax.xml.bind.JAXBException:在模块路径或类路径上找不到JAXB-API的实现。 [java.lang.classNotFoundException:com.sun.xml.bind.v2.ContextFactory]。造成原因:java.lang.classNotFoundException:com.sun.xml.bind.v2.ContextFactory。
在控制台上打印删除请求的响应就足够奇怪了,并且不会引发任何错误。 这是我项目的各种文件。
Employee.java
package com.wipro;
import javax.xml.bind.annotation.*;
import javax.json.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder= {"EmpId","EmpName","EmpDept","EmpAge"})
@JsonbPropertyOrder("{EmpId,EmpName,EmpDept,EmpAge}")
public class Employee {
private String EmpId;
private String EmpName;
private String EmpDept;
private int EmpAge;
public Employee() {
}
public Employee(String id,String name) {
this.EmpId=id;
this.EmpName=name;
}
public String getEmpId() {
return EmpId;
}
public void setEmpId(String empId) {
this.EmpId = empId;
}
public String getEmpName() {
return EmpName;
}
public void setEmpName(String empName) {
this.EmpName = empName;
}
public String getEmpDept() {
return EmpDept;
}
public void setEmpDept(String empDept) {
this.EmpDept = empDept;
}
public int getEmpAge() {
return EmpAge;
}
public void setEmpAge(int empAge) {
this.EmpAge = empAge;
}
}
EmployeeDao.java
package com.wipro;
import java.util.HashMap;
import java.util.Map;
public enum EmployeeDao {
object;
private Map<String,Employee> contentProvider = new HashMap<>();
private EmployeeDao() {
Employee emp = new Employee("1","Mohit");
emp.setEmpDept("I&ES");
emp.setEmpAge(21);
contentProvider.put("Mohit",emp);
emp=new Employee("2","Rohit");
emp.setEmpDept("Digital");
emp.setEmpAge(22);
contentProvider.put("Rohit",emp);
}
public Map<String,Employee> getModel() {
return contentProvider;
}
}
EmployeeResource.java
package com.wipro;
import java.util.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.*;
@Path("/employee")
public class EmployeeResource {
@GET
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML,MediaType.TEXT_XML})
public List<Employee> getEmployeeList(){
List<Employee> emp = new ArrayList<Employee>();
emp.addAll(EmployeeDao.object.getModel().values());
return emp;
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void putEmployee(JAXBElement<Employee> emp){
Employee emps =emp.getValue();
EmployeeDao.object.getModel().put(emps.getEmpId(),emps);
}
@DELETE
@Consumes(MediaType.TEXT_PLAIN)
public void deleteEmployee(String name) {
Employee emp = EmployeeDao.object.getModel().get(name);
if(emp==null) {
throw new RuntimeException("Employee with name \""+name+"\" does not exist.");
}
EmployeeDao.object.getModel().remove(name);
}
@DELETE
@Path("{name}")
public void deleteEmployee1(@PathParam("name") String name) {
Employee emp = EmployeeDao.object.getModel().get(name);
if(emp==null) {
throw new RuntimeException("Employee with name \""+name+"\" does not exist.");
}
EmployeeDao.object.getModel().remove(name);
}
@POST
@Path("form")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void putEmployee(@FormParam("EmpId") String EmpId,@FormParam("EmpName") String
EmpName,@FormParam("EmpDept") String EmpDept,@FormParam("EmpAge") int EmpAge) {
Employee emp = new Employee(EmpId,EmpName);
emp.setEmpDept(EmpDept);
emp.setEmpAge(EmpAge);
EmployeeDao.object.getModel().put(EmpName,emp);
}
}
EmployeeClient.java
package com.wipro;
import java.net.URI;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.jersey.client.ClientConfig;
import com.sun.research.ws.wadl.Response;
import javax.ws.rs.client.*;
public class EmployeeClient {
public static void main(String[] args) {
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(getBaseURI());
String response = target.path("rest").path("employee").request().get(Response.class).toString();
System.out.println(response);
Employee emp = new Employee("3","Ankit");
emp.setEmpDept("HR");
emp.setEmpAge(21);
target.path("rest").path("employee").request().put(Entity.entity(emp,MediaType.APPLICATION_XML));
System.out.println(response);
response = target.path("rest").path("employee").request().get(Response.class).toString();
System.out.println(response);
response = target.path("rest").path("employee/Ankit").request().delete().toString();
System.out.println(response);
Form form = new Form();
form.param("EmpId","3");
form.param("EmpName","Ankit");
form.param("EmpDept","HR");
form.param("EmpAge","20");
Response rest = target.path("rest").path("employee/form").request().post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED),Response.class);
System.out.println(rest.getStatus());
}
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost:8080/"+"Assignment_6").build();
}
}
我们非常感谢您的帮助。谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)