![](/img/trans.png)
[英]javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: JSON support in Java REST Webservices with Jersey
[英]error while throwing WebApplicationException : com.sun.jersey.api.MessageException: A message body writer for Java class java.util.HashMap not found
我正在使用JERSEY 1.8。 當我的函數正常運行時,它運行正常。 但是如果發生異常,則會引發錯誤:
com.sun.jersey.api.MessageException: A message body writer for Java class java.util.HashMap, and Java type class java.util.HashMap, and MIME media type application/octet-stream was not found.
我嘗試了所有給出的解決方案,但並沒有消失。
JAVA類:
@GET
@Path("/{programId}/export")
public Response exportProgramData(@PathParam(PROGRAM_ID) String programId, @Context HttpServletRequest request) {
ResponseBuilder respBuilder = null;
Map<String, Object> response = new HashMap<String, Object>();
try {
String programResponse = programsFacade.getProgramReportAsCSV(programId, userId);
if (programResponse != null) {
String csvFileName = programsFacade.buildFileNameForReport(programId, userId) + CSV_EXTN;
respBuilder = Response.ok().entity(new ByteArrayInputStream(programResponse.getBytes()));
respBuilder.header(HTTP.CONTENT_TYPE, CONTENT_CSV_TYPE);
respBuilder.header(CONTENT_DISPOSITION, "attachment; filename=\"" + csvFileName + "\"");
NewCookie downloadCookie = new NewCookie("fileDownload", "true", "/", null, "no comment", 1073741823,
false);
respBuilder.cookie(downloadCookie);
logger.info(LOGGER_PREFIX + "Exported program response for program: " + programId);
} else {
String message = "There was an error while getting the program response.";
logger.error(LOGGER_PREFIX + message);
respBuilder = Response.ok().entity(message);
respBuilder.header(HTTP.CONTENT_TYPE, MediaType.TEXT_PLAIN);
NewCookie downloadCookie = new NewCookie("fileDownload", "false", "/", null, "no comment", 1073741823,
false);
respBuilder.cookie(downloadCookie);
}
} catch (WorkflowManagerException wme) {
response.put(SUCCESS, false);
response.put(HTTP_STATUS, WfManagerUtil.getResponseErrorCode(wme).getStatusCode());
response.put(MESSAGE, wme.getMessage());
throw new WebApplicationException(Response.status(WfManagerUtil.getResponseErrorCode(wme)).entity(response)
.build());
}catch (Exception ex) {
String message = "There was an error while getting the program response.";
logger.error(LOGGER_PREFIX + message, ex);
respBuilder = Response.ok().entity(message);
respBuilder.header(HTTP.CONTENT_TYPE, MediaType.TEXT_PLAIN);
NewCookie downloadCookie = new NewCookie("fileDownload", "false", "/", null, "no comment", 1073741823,
false);
respBuilder.cookie(downloadCookie);
}
return respBuilder.build();
}
聚甲醛
<dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20080701</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>3.0.5.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<!-- REST Dependency -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
<!-- <scope>provided</scope> -->
</dependency>
n is provided by velocity dep but is not available as artifact -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
<!-- <scope>provided</scope> -->
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
<!-- <scope>provided</scope> -->
</dependency>
如果出現任何WorkflowManagerException異常,它將僅引發此錯誤。
請幫忙
嘗試給予
respBuilder = Response.ok()。entity(new String(“獲取程序響應時發生錯誤。”));
在例外情況下
假設您希望將HashMap
序列化為JSON ...
如果客戶端未設置Accept: application/json
標頭,則Jersey無法知道將HashMap
序列化為哪種媒體類型。 因此,它默認為嘗試序列化到application/octet-stream
。 並且對於該媒體類型的無作家HashMap
。 您需要通過在響應中設置媒體類型來告訴Jersey
Response errorResponse = Response.status(..)
.entity(response)
.type("application/json")
.build();
throw new WebApplicationException(errorResponse);
還要確保在web.xml中配置jersey-json
以使用Jackson
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.