如何在 Spring 引导响应中获得没有转义字符的 JSON?

How to get a JSON without escape characters in Spring Boot Response?

根据我的要求,我必须像这样在我的服务 class 中将此 JSON 硬编码为字符串。

String sample = " {\"menu\": {\n" +
            "  \"id\": \"file\",\n" +
            "  \"value\": \"File\",\n" +
            "  \"popup\": {\n" +
            "    \"menuitem\": [\n" +
            "      {\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"},\n" +
            "      {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"},\n" +
            "      {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}\n" +
            "    ]\n" +
            "  }\n" +
            "}}";

所以我有一个控制器,其中必须给出这个 JSON 作为响应。

@RequestMapping(value = '''')
public Response rechargeRequestResponseMatcher(HttpServletRequest request) throws IOException {

     try{
        JSONObject jsonObj = new JSONObject(sample);
        String jsonString = jsonObj.toString();
        response.setResponseBody(jsonString );
    }
    }catch (Exception e){
     :
    }

如果我使用带有转义符的邮递员 ResponseBody 来调用它。像这样。

为什么会这样以及如何只获得 JSON 而不是这样。

谢谢,

如果您使用 spring 启动,您应该将您的控制器设为 RestController,或者如果您不希望整个控制器成为 RestController,您可以注释具体方法为@ResponseBody。如果您仍然不想要这两个中的任何一个,请尝试这样做,

please note that I am using HttpServletResponse responses for this example

response.setResponseBody(sample ); //add the string directly
response.setStatus(200); //set status explicitly

我希望这会起作用,否则使用 Spring 引导的实际美感,并使您的控制器成为 RestController

以上建议无效,您可以再试一次:

  1. 重新设计您的回复 class 类似于您的回复示例 此处显示
  2. 将您的 json 对象反序列化为该响应 class

  3. return即class。 希望有用:
    示例:

    public class 回应{

         private String status;
         private String message;
         private ResponseBody responseBody;
        //standard setters getters
    
    }
    
    public class ResponseBody{
          private Menu menu;      
          //setters getters
    }
    
    public class Menu{
          private String id;
          private String value;
          private Popup popup;
          //setters getters
    }
    
    public class Popup{
          private List<Menuitem>menuitem;
          //setters getters
    }
    public class Menuitem{
          private String value;
          private String  onclick;
          //setters getters
    }