【问题标题】:Remove backslashes from response entity Json in Java从 Java 中的响应实体 Json 中删除反斜杠
【发布时间】:2019-10-16 16:54:30
【问题描述】:

我正在测试我的 Rest 控制器,当我在 java 中打印结果时,它们似乎没问题,但在 swagger 或 postman 上它返回斜杠。我如何删除这些。

在 Java 中,我用日志打印对象,结果如下:

返回对象`

{
  create=Create{
    create={
      "Apartment": "Flat",
      "Drink": {
        "Alchol": {
          "Beer": {
            "Dutch": "Groeshe",
            "Zimbo": "Zambezi"
          },
          "Wine": "pocupine"
        },
        "NonAlcoholic": {
          "fizzy": "Coke",
          "juice": "liquifruit"
        }
      },
      "fruit": "Apple",
      "size": "Large",
      "color": "Red",
      "Proffesion": [
        "Java",
        "Lawyer"
      ],
      "cars": {
        "type": "BMW",
        "Color": "Brown"
      }
    }
  },
  update=null,
  delete=null
}

我用谷歌搜索,java 中似乎没有任何东西可以解决这个问题。请帮忙

@RestController
public class ProcessController<T extends Serializable> {


@Autowired
private EngineImpl engine;


@RequestMapping(value = "/api/processEngine", method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<ReturnObject<T>> processEngine(@RequestBody final Request request) throws Exception {

    ReturnObject<T> response = engine.calculate((T) request.getA(), (T) request.getB());

    LOG.info("ReturnObject engine response parameters: " + response);
    //Prints: ReturnObject{create=Create{create={"Apartment":"Flat","Drink":{"Alchol":{"Beer":{"Dutch":"Groeshe","Zimbo":"Zambezi"},"Wine":"pocupine"},"NonAlcoholic":{"fizzy":"Coke","juice":"liquifruit"}},"fruit":"Apple","size":"Large","color":"Red","Proffesion":["Java","Lawyer"],"cars":{"type":"BMW","Color":"Brown"}}}, update=null, delete=null}
    return new ResponseEntity<>(response, HttpStatus.OK);
}

}

预期:

{
  "create": {
    "create": {
        "Apartment": "Flat",
        "Drink": {
            "Alchol": {
                "Beer": {
                    "Dutch": "Groeshe",
                    "Zimbo": "Zambezi"

                },
                "Wine": "pocupine"

            },
            "NonAlcoholic": {
                "fizzy": "Coke",
                "juice": "liquifruit"
            }
        },
        "fruit": "Apple",
        "size": "Large",
        "color": "Red",
        "Proffesion": ["Java", "Lawyer"],
        "cars": {
            "type": "BMW",
            "Color": "Brown"
        }
    },
    "update": null,
    "delete": null
}

}

实际:

{
  "create": {
    "create": "{\"Apartment\":\"Flat\",\"Drink\":{\"Alchol\":{\"Beer\":{\"Dutch\":\"Groeshe\",\"Zimbo\":\"Zambezi\"},\"Wine\":\"pocupine\"},\"NonAlcoholic\":{\"fizzy\":\"Coke\",\"juice\":\"liquifruit\"}},\"fruit\":\"Apple\",\"size\":\"Large\",\"color\":\"Red\",\"Proffesion\":[\"Java\",\"Lawyer\"],\"cars\":{\"type\":\"BMW\",\"Color\":\"Brown\"}}"
  },
  "update": null,
  "delete": null
}

【问题讨论】:

  • 如果您“覆盖”响应类中的 toString() 方法,请从对象中删除 .toString() 方法。您的 Jackson 或 gson 库将自动负责解析对象。
  • @SivarajVelayutham 我尝试从响应对象中删除 toString() 方法,但没有任何变化。我也从依赖类中删除了仍然没有变化
  • 如果您的 ReturnObject 响应 = engine.calculate((T) request.getA(), (T) request.getB());返回字符串然后更改控制器返回类型 ResponseEntity
  • 尝试从控制器中删除 因为我认为它会使其余的响应字符串。如果它有效,请告诉我们。

标签: java json spring rest spring-boot


【解决方案1】:

你需要使用解析器,得到漂亮的 JSON 字符串,猜你使用的是 Jackson,所以你可以这样做:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(yourObject);

【讨论】:

    【解决方案2】:

    在第二次“创建”之后,它基本上是将您的值转换为字符串。 请执行此注释 @PostMapping("/api/processEngine") 请试试这个并立即告诉我

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 2013-01-17
      • 2020-12-01
      • 2018-08-23
      • 2012-12-21
      • 2018-06-01
      • 2016-12-05
      • 1970-01-01
      • 2018-02-17
      相关资源
      最近更新 更多