Spring API 应该 return JSON 而不是转义字符串
Spring API should return JSON instead of escaped String
我有 Spring 端点,它应该是 return JSON,所以它可以是 collapsed/expanded 通过 Chrome。有没有办法告诉 Spring 消息中的字符串是实际的 Json 表示,并且不需要转义双引号
端点声明:
@GET
@Path("/validate/{id}")
@Produces("application/json")
Response validate(@Context HttpServletRequest request, @PathParam("id") String id);
端点实现:
public Response validate(HttpServletRequest request, String id) {
try {
return validatorService.validate(request, String id);
} catch(Exception e) {
throw new MyCustomException(e);
}
}
异常处理程序:
public class ExceptionHandler implements ExceptionMapper {
@Override
public Response toResponse(MyCustomException exception) {
String json = buildJsonResponse(exception);
Message message = new Message(json);
return Response.status(ERROR_HTTP_STATUS_CODE).entity(response).build();
}
}
public class Message {
String json;
public Message(String json) {
this.json = json;
}
public String getJson() {
return json;
}
}
回复:
"json": "{ \"key\": \"value\" }"
预期响应:
"json": { "key": "value" }
解决方案:
private JsonNode convertToJson(String json) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readTree(json);
} catch (IOException e) {
return NullNode.getInstance();
}
}
您正在将对象转换为 json 格式的字符串。 Spring 只是 returns json 参数中的一个字符串值。如果你想要 return json 格式化对象而不是字符串,请不要将你的对象转换为字符串(json)。将 json 转换为 Object
类型并删除下面的行。
String json = buildJsonResponse(exception);
如果您想 return 在字符串参数中自定义 json 将您的所有对象转换为 json 而不仅仅是它的变量。
您可以只 return 来自其余 api 的字符串,使用您添加的生成参数。
produces = "application/json"
你为什么不用 @JsonRawValue
注释你的 getter
public class Message {
String json;
public Message(String json) {
this.json = json;
}
@JsonRawValue
public String getJson() {
return json;
}
}
那个
我有 Spring 端点,它应该是 return JSON,所以它可以是 collapsed/expanded 通过 Chrome。有没有办法告诉 Spring 消息中的字符串是实际的 Json 表示,并且不需要转义双引号
端点声明:
@GET
@Path("/validate/{id}")
@Produces("application/json")
Response validate(@Context HttpServletRequest request, @PathParam("id") String id);
端点实现:
public Response validate(HttpServletRequest request, String id) {
try {
return validatorService.validate(request, String id);
} catch(Exception e) {
throw new MyCustomException(e);
}
}
异常处理程序:
public class ExceptionHandler implements ExceptionMapper {
@Override
public Response toResponse(MyCustomException exception) {
String json = buildJsonResponse(exception);
Message message = new Message(json);
return Response.status(ERROR_HTTP_STATUS_CODE).entity(response).build();
}
}
public class Message {
String json;
public Message(String json) {
this.json = json;
}
public String getJson() {
return json;
}
}
回复:
"json": "{ \"key\": \"value\" }"
预期响应:
"json": { "key": "value" }
解决方案:
private JsonNode convertToJson(String json) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readTree(json);
} catch (IOException e) {
return NullNode.getInstance();
}
}
您正在将对象转换为 json 格式的字符串。 Spring 只是 returns json 参数中的一个字符串值。如果你想要 return json 格式化对象而不是字符串,请不要将你的对象转换为字符串(json)。将 json 转换为 Object
类型并删除下面的行。
String json = buildJsonResponse(exception);
如果您想 return 在字符串参数中自定义 json 将您的所有对象转换为 json 而不仅仅是它的变量。
您可以只 return 来自其余 api 的字符串,使用您添加的生成参数。
produces = "application/json"
你为什么不用 @JsonRawValue
注释你的 getterpublic class Message {
String json;
public Message(String json) {
this.json = json;
}
@JsonRawValue
public String getJson() {
return json;
}
}
那个