未找到 Java 类型和 MIME 媒体类型 application/json;charset=utf-8 的消息正文阅读器
Posted
技术标签:
【中文标题】未找到 Java 类型和 MIME 媒体类型 application/json;charset=utf-8 的消息正文阅读器【英文标题】:A message body reader for Java type and MIME media type, application/json;charset=utf-8, was not found 【发布时间】:2016-06-14 19:56:40 【问题描述】:我正在使用一个以 AngularJS 作为客户端和 Jersey Rest WebService 的应用程序。我可以通过使用 angular $http.get() 成功获取数据,但我很难将数据发布到服务器。我收到以下异常。
com.sun.jersey.spi.container.ContainerRequest getEntity 严重:找不到 Java 类型、dto.BookObject 类和 MIME 媒体类型 application/json;charset=utf-8 的消息正文阅读器
BookObject.java
package dto;
public class BookObject
private long id;
private String author;
private String name;
private String series;
private int pages;
private boolean availability;
public long getId()
return id;
public void setId(long id)
this.id = id;
public String getAuthor()
return author;
public void setAuthor(String author)
this.author = author;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getSeries()
return series;
public void setSeries(String series)
this.series = series;
public int getPages()
return pages;
public void setPages(int pages)
this.pages = pages;
public boolean isAvailability()
return availability;
public void setAvailability(boolean availability)
this.availability = availability;
我在 Angular 客户端中的控制器是:
var bookApp = angular.module('sharpLibraryApp', []);
bookApp.controller('bookAppCtrl', function($scope, $http)
$http.get("http://localhost:8080/RESTfulProject/REST/WebService/GetBooks").
then(function(response)
$scope.books = response.data;
,
function getError(response)
);
$scope.addBook = function()
alert('Adding book...');
$scope.books.push("id": $scope.id, "name": $scope.name, "author": $scope.author, "pages": $scope.pages, "availability": $scope.availability );
alert('books data:');
var bookObj = 'id' : $scope.id, 'name' : $scope.name, 'author' : $scope.author, 'pages' : $scope.pages, 'availability' : $scope.availability
;
$http(
method : "POST",
url : "http://localhost:8080/RESTfulProject/REST/WebService/storeBook",
dataType: 'json',
data: '',
headers:
"Content-Type": "application/json"
, bookObj).then(function(response)
alert('success');
$scope.message = response.data;
, function(response)
alert('failure');
$scope.message = response.status;
);
/* $http.post('http://localhost:8080/RESTfulProject/REST/WebService/storeBook', bookObj).
then(function(response)
alert('success');
$scope.message = response.data.statusText;
,
function myError(response)
alert('failed' + response.status);
$scope.message = response.data.statusText;
);
*/ $scope.id = "";
$scope.name = "";
$scope.author = "";
$scope.pages = "";
$scope.availability = false;
;
$scope.resetBook = function()
$scope.id = "";
$scope.name = "";
$scope.author = "";
$scope.pages = "";
$scope.availability = false;
;
);
bookApp.controller('optionCtrl', function($scope, $http)
$scope.options = ["true", "false"];
);
休息服务:
package webService;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import model.LibraryManager;
import com.google.gson.Gson;
import dto.BookObject;
@Path("/WebService")
public class BookService
LibraryManager libraryMgr = new LibraryManager();
Gson gson = new Gson();
@GET
@Path("/GetBooks")
@Produces("application/json")
public String book()
String books = null;
try
List<BookObject> bookData = libraryMgr.GetBooks();
System.out.println(gson.toJson(bookData));
books = gson.toJson(bookData);
catch (Exception e)
System.out.println("error");
return books;
@POST
@Path("/storeBook")
@Consumes(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, "application/x-www-form-urlencoded")
public Response putBooks(BookObject bookObj)
try
libraryMgr.storeBooks(bookObj);
catch (Exception e)
e.printStackTrace();
return Response.ok().build();
在提琴手响应中,我可以看到以下错误消息: HTTP 错误 415 不支持的媒体类型
请建议我摆脱上述错误。
【问题讨论】:
【参考方案1】:您的 POJO 中缺少注释 @XmlRootElement
,因此 jersey 无法弄清楚如何解组 JSON。
【讨论】:
我已经尝试使用 @XmlRootElement 注释到 BookObject pojo 和我已经注释了我的 POJO(@xmlRootElement),并且我没有在我的项目中使用 Maven。这个问题通过放置新的 Jersey 库来解决,之前我使用 jersey-1.3.jar 但我使用的是 1.7 版本的 jersey。
【讨论】:
以上是关于未找到 Java 类型和 MIME 媒体类型 application/json;charset=utf-8 的消息正文阅读器的主要内容,如果未能解决你的问题,请参考以下文章
未找到 Java 类型、类 org.json.JSONObject.... 和 MIME 媒体类型、application/json 的消息正文阅读器
未找到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
未找到 Java 类型、net.sf.json.JSONObject 类和 MIME 媒体类型 application/json 的消息正文编写器
找不到 Java 类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
严重:找不到 Java 类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
找不到 Java 类型 myPackage.B 类和 MIME 媒体类型 application/octet-stream 的消息正文编写器