java - Jax-RS 响应来自 HTML/文本而不是 JSON

标签 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有错误,我就去查看基本方法,将实体转换为Data Transfer Object,回传给客户端。

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

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

我以前没有见过这个错误,我不确定如何处理它?<​​/p>

最佳答案

尝试

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

关于java - Jax-RS 响应来自 HTML/文本而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53631346/

相关文章:

java - java 1.4 的 json 库

java - 使用 Nd4j 计算协方差矩阵

rest - 我的 REST API 是否可以使用此安全/身份验证?

java - Jackson:如何反序列化我自己的类的实例字段

java - 在Java中接收多个控制台输入

java - 如何加载应用程序的 JAR 文件中的 CSS 和 JS 文件

javascript - PHP 不解码使用 Javascript 创建的 JSON 对象。错误总是返回 4

json - Ember - 成功插入后端后未返回记录 ID(空)

json - Golang 解码/解码 JSON 中的无效 unicode

java - Resty - IllegalArgumentException 与 | URL 中的字符