【发布时间】:2018-01-13 18:26:45
【问题描述】:
我正在 JavaEE 中开发一个 REST API,并在 ReactJS 中使用该 API 开发一个客户端。
当我使用邮递员时,API 工作得很好,但是一旦我在 JS 中使用 fetch 方法通过我的客户端发布 JSON 信息,我就会收到 415 错误:浏览器控制台中不支持的媒体类型。
对于 API,我使用 Jersey 来处理请求并使用 Hibernate 作为 ORM。我有genson依赖,正如我所说,一切都与邮递员完美配合。 我还在发送之前检查了 JSON.stringify() 的结果,我觉得它看起来不错。
另外,在我的服务器控制台中,每次我尝试发布任何内容时都会收到此错误:
GRAVE: A message body reader for Java class model.User, and Java type class model.User, and MIME media type application/octet-stream was not found.
我检查并仔细检查了所有内容,我发送了正确的标头,浏览器将请求识别为“应用程序/json”内容类型,但就像我的 API 仍然不接受它,或者将其作为应用程序/接收八位字节流媒体类型。
这是完成获取的方法:
signIn(){
console.log(JSON.stringify(this.state));
fetch('http://localhost:8080/P52/users', {
method: 'POST',
body: JSON.stringify(this.state),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}).then(res => {
return res.json();
}).catch(err=>err)
}
API中接收数据的方法:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public User createUser(User u){
return UserController.createUser(u);
}
控制器只是创建一个新的用户类实例来在用户模型类中运行这段代码:
public User(User u){
this.id = u.getId();
this.pseudo = u.getPseudo();
this.firstname = u.getFirstname();
this.lastname = u.getLastname();
Session session = (Session)HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(this);
session.getTransaction().commit();
session.close();
}
如果有人对我的问题有答案或已经遇到过,请告诉我,这样我才能最终推进这个项目。
提前谢谢你,
亚瑟
【问题讨论】:
-
我对 Jersey 不熟悉,但尝试使用注解
@Produces(MediaType.APPLICATION_JSON)为方法createUser(...)。 -
我忘了告诉我整个球衣资源文件配置为生成 json