박수홍
박수홍

Reputation: 1

What is the reason why line api image map 400 error occurs?

I am currently developing the Image Map API among the Line APIs. We are sending the request message below. Only the same 400 error is occurring. Can anyone tell me what kind of error it is? thank you

API guide url : https://developers.line.biz/en/reference/messaging-api/#imagemap-message

my code:

        URL urlPath = null;
        HttpURLConnection conn = null;

        OutputStream outputStream = null;
        BufferedReader in = null;
        BufferedWriter bw = null;

        JSONObject data = null;
        JSONArray areasArr = null;
        JSONObject boundsObj = null;
        JSONObject actionObj = null;
        JSONObject sizeObj = null;
        JSONObject dataObj = null;

        String[] richMenuText = { "a", "b", "c", "d", "e", "f" };
        String[] displayTextArr = null;
        int[] yLatitudeArr = { 0, 0, 0, 521, 521, 521 };
        int[] xLongitudeArr = { 0, 346, 692, 0, 346, 692 };
        int[] widthArr = { 346, 346, 347, 346, 346, 347 };
        int height = 520;

        String richMenuId = null;

        String lang = null;

        try {
            urlPath = new URL(url + "message/push");

            conn = (HttpURLConnection) urlPath.openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Authorization", "Bearer " + token);

//          ========= Start create JSON body ===========

            lang = "ko";

            sizeObj = new JSONObject();
            sizeObj.put("width", 800).put("height", 540);

            JSONObject baseSize = new JSONObject();
            baseSize.put("width", 1040)
                    .put("height", 1040);
            
            data = new JSONObject();
            data.put("type", "imagemap")
                .put("baseUrl", "https://e8j.storyof.co.kr/upload/help/")
                .put("altText", "test")
                .put("baseSize", baseSize);
                
            areasArr = new JSONArray();
            
            for (int i = 0; i < 6; i++) {

                boundsObj = new JSONObject();
                boundsObj.put("y", yLatitudeArr[i]).put("x", xLongitudeArr[i]).put("width", widthArr[i]).put("height", height);
                
                System.out.println(displayTextArr);
                
                actionObj = new JSONObject();
                actionObj.put("type", "message")
                         .put("text", richMenuText[i]);

                dataObj = new JSONObject();
                actionObj.put("area", boundsObj);

                areasArr.put(actionObj);
            }
            
            JSONObject area = new JSONObject();
            area.put("x", 0);
            area.put("y", 0);
            area.put("width", 1040);
            area.put("height", 585);
            
            JSONObject externalLink = new JSONObject();
            externalLink.put("linkUri", "https://example.com/see_more.html");
            externalLink.put("label", "See More");
            
            JSONObject video = new JSONObject();
            video.put("originalContentUrl", "https://testurl.com");
            video.put("previewImageUrl", "https://testurl.com");
            video.put("area", area);
            video.put("externalLink", externalLink);
            
            data.put("actions", areasArr);

            log.debug("data: "+ data);

//          ========= end create JSON body =============

//          ======= response Read =======
            conn.setDoOutput(true);
            outputStream = conn.getOutputStream();
            bw = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            bw.write(data.toString());
            bw.flush();
            bw.close();

            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

=============== request ===============

API name: Imagemap message

url: https://api.line.me/v2/bot/message/push

header: {"Content-Type": "application/json", "Authorization", "Bearer apikey"}

body:

{
  "baseSize": {
    "width": 1040,
    "height": 1040
  },
  "baseUrl": "https://testURL.do/test/",
  "altText": "test",
  "type": "imagemap",
  "actions": [
    {
      "area": {
        "x": 0,
        "width": 346,
        "y": 0,
        "height": 520
      },
      "text": "a",
      "type": "message"
    },
    {
      "area": {
        "x": 346,
        "width": 346,
        "y": 0,
        "height": 520
      },
      "text": "b",
      "type": "message"
    },
    {
      "area": {
        "x": 692,
        "width": 347,
        "y": 0,
        "height": 520
      },
      "text": "c",
      "type": "message"
    },
    {
      "area": {
        "x": 0,
        "width": 346,
        "y": 521,
        "height": 520
      },
      "text": "d",
      "type": "message"
    },
    {
      "area": {
        "x": 346,
        "width": 346,
        "y": 521,
        "height": 520
      },
      "text": "e",
      "type": "message"
    },
    {
      "area": {
        "x": 692,
        "width": 347,
        "y": 521,
        "height": 520
      },
      "text": "f",
      "type": "message"
    }
  ]
}

The error message is as follows:

java.io.IOException: Server returned HTTP response code: 400 for URL: https://api.line.me/v2/bot/message/push
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1900)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
    at line.LineAPI.imageMapMesage(LineAPI.java:412)
    at telegrambot.telegramController.test(telegramController.java:101)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:854)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:765)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
    at egovframework.rte.ptl.mvc.filter.HTMLTagFilter.doFilter(HTMLTagFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:388)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
    at java.lang.Thread.run(Thread.java:748)

Upvotes: 0

Views: 14

Answers (0)

Related Questions