首页 > 解决方案 > 当我们发送 BAD Request 状态作为输出时,Resful APi 输出正在从 JSON 更改为 XML

问题描述

我制作了一个生成 JSON 格式输出 (@Produces(MediaType.APPLICATION_JSON)) 的宁静 API。当状态为 Created 或 Ok 时,这将按预期工作。但是每当我发送带有 JSON 格式错误消息的输出错误请求时。当我使用邮递员进行测试时,我没有收到带有错误消息的预期 JSON 结果,而不是收到类似“Unexpected 'B'”的信息。如果我使用soapui 进行测试,它会给出Xml 的结果。

这些是我用于我的方法的注释

@POST 
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("sample")

这些是我根据请求发送的响应

return Response
            .status(Status.BAD_REQUEST)
            .type(MediaType.APPLICATION_JSON)
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", " POST")
            .entity(JsonResponse)
            .build();

return Response
            .status(Status.UNAUTHORIZED)
            .type(MediaType.APPLICATION_JSON)
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", " POST")
            .entity(JsonResponse)
            .build();

 return Response
        .status(Status.CREATED)
        .type(MediaType.APPLICATION_JSON)
        .header("Access-Control-Allow-Origin", "*")
        .header("Access-Control-Allow-Methods", "POST")
        .entity(JsonResponse)
        .build();

只有当返回类型不是创建状态时我才有问题。

这是我的对象映射器类

private static final ObjectMapper MAPPER = new ObjectMapper();
static 
{
  MAPPER.setSerializationInclusion(Include.ALWAYS);
  MAPPER.disable(MapperFeature.USE_GETTERS_AS_SETTERS);
  MAPPER.configure(SerializationFeature.WRAP_ROOT_VALUE, true); //in response
  MAPPER.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);//in   request


}
public ObjectMapperProvider()
{
System.out.println("Instantiate ObjectMapperProvider");
}

@Override
public ObjectMapper getContext(Class<?> arg0) 
{
return MAPPER;
}

我在邮递员中使用了以下响应类型

这是我根据上述要求得到的结果。我期待一个json格式的输出

我在 XML 格式的 soapUi 中看到了这个结果

这个结果我在 SoapUi 中以 json 格式看到

这是我在以 XML 格式发送带有错误消息的 401 状态代码但我以 JSON 格式发送时看到的响应。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>401 - Unauthorized: Access is denied due to invalid credentials. 
    </title>
    <style type="text/css">
        <!--
     body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica,                            
     sans-serif;background:#EEEEEE;}
      fieldset{padding:0 15px 10px 15px;} 
      h1{font-size:2.4em;margin:0;color:#FFF;}
      h2{font-size:1.7em;margin:0;color:#CC0000;} 
      h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
      #header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font- 
      family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
      background-color:#555555;}
      #content{margin:0 0 0 2%;position:relative;}
      .content-container{background:#FFF;width:96%;margin- 
       top:8px;padding:10px;position:relative;}
       -->

        </style>
       </head>
         <body>
           <div id="header">
             <h1>Server Error</h1>
           </div>
           <div id="content">
              <div class="content-container">
                 <fieldset>
                    <h2>401 - Unauthorized: Access is denied due to invalid 
                credentials.</h2>
                     <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
                 </fieldset>
             </div>
          </div>
          </body>
        </html>

如果您需要任何其他信息,请告诉我。

标签: javarestsoapuipostmanrestful-architecture

解决方案


推荐阅读