Jax-RS响应以HTML /文本而不是JSON形式出现

时间:2018-12-05 11:32:48

标签: java json rest jax-rs

我有一个前端React应用程序,在这里我向REST Jax-RS后端服务器发出请求。

这是正在发送的请求

  deletePost = (post) =>{
return deleter(config.restUrl + `posts/${post}`)
 }

在这里,我获得了后端的标准URL,并带有“删除程序”功能,这只是一种标准化的获取删除方法(也已与其他实体一起使用)。

这是我的Jax-RS资源:

@DELETE
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@Path("/{id: [0-9]+}")
public Response deletePost(@HeaderParam("authorization") String token, @PathParam("id") Integer id) throws ResourceNotFoundException, AuthenticationException
{
    AuthenticationContext authenticationContext = authenticationFacade.authenticateBearerHeader(token);
    Post                  post                  = postFacade.delete(authenticationContext, id);
    return Response.ok(gson.toJson(PostDTO.basic(post))).build();
}

问题是它给我一个错误,指出表单是HTML /文本:

MessageBodyWriter not found for media type\u003dtext/html, type\u003dclass com.group3.sem3exam.rest.dto.PostDTO, genericType\u003dclass com.group3.sem3exam.rest.dto.PostDTO

由于这暗示是PostDTO出现错误,因此我检查了将实体转换为数据传输对象的基本方法,然后将其发布回客户端。

   public static PostDTO basic(Post post)
{
    return new PostDTO(
            post.getId(),
            post.getContents(),
            post.getCreatedAt(),
            null,
            ImageDTO.list(post.getImages(), ImageDTO::withoutUser)
    );
    }

在这里它只是调用返回对象新实例的方法。

我之前从未见过此错误,并且不确定如何处理?

1 个答案:

答案 0 :(得分:1)

尝试

return Response.status(Status.OK).entity(new Gson().toJson(PostDTO.basic(post))).build();