當我嘗試使用POST向我的Jersey REST服務傳遞JSON字符串時,REST客戶端返回415 - 不支持的媒體類型。通過GET查詢資源工作正常。傑克遜不會將JSON字符串序列化爲Java對象
實體類:
@Entity
public class Agent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
public Agent() {
}
public Agent(String name) {
this.name = name;
}
@OneToMany(mappedBy = "agent", cascade = CascadeType.PERSIST)
@JsonBackReference
private List<Action> actions = new ArrayList<>();
//...getter/setter...
}
服務類REST:
@Path("/agents")
public class AgentService {
private static PersistenceFacade f = new PersistenceFacade();
private static StatusFacade s = new StatusFacade();
//GET all Agents
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Agent> getAllAgents() {
return f.getAllAgents();
}
@POST
@Path("/create")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public void postAgent(Agent a) {
f.createAgent(a);
}
}
PersistenceFacade
public class PersistenceFacade {
//EMF als zentraler Handler für alle EM
private static EntityManagerFactory factory = Persistence.createEntityManagerFactory("simulationPU");
public void createAgent(Agent a) {
EntityManager em = factory.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(a);
tx.commit();
}
public List<Agent> getAllAgents() {
EntityManager em = factory.createEntityManager();
Query q = em.createQuery("SELECT a FROM Agent a");
List<Agent> aList = q.getResultList();
return aList;
}
傳遞GET請求來http://localhost:8080/simulation_api/agents回報我TESTDATA:
[{"id":2104,"name":"pi3"},{"id":2107,"name":"pi4"}]
但是,當我嘗試使用POST將JSON字符串傳遞到http://localhost:8080/simulation_api/agents/create時,如上所述發生錯誤(HTTP響應415)。我把要求的身體內:
{"id":2804,"name":"pi7"}
可能是什麼問題?沒有拋出異常......
你是否包括「內容類型:應用程序/ JSON的」頭在你的POST請求? –