Как кодировать restcontroller для действий Google? - PullRequest
0 голосов
/ 11 июля 2019

Я хочу закодировать Rest Controller в spring-boot для моего webhook. Я создаю действие Google с простыми действиями.

  • Это шаблон: https://github.com/actions-on-google/dialogflow-webhook-boilerplate-java/blob/master/src/main/java/com/example/ActionsServlet.java.
  • Я хочу сделать то же самое, только в spring-boot. Я хочу манипулировать телом JSON в качестве входных данных, но не уверен, как это сделать.

    @RestController
    public class indexController extends HttpServlet {
    
    
    @Autowired
    private App actionsApp;
    
    //handle all incoming requests to URI "/"
    // @GetMapping("/")
    //  public String sayHello() {
    //    return "Hi there, this is a Spring Boot application";}
    
    private static final Logger LOG = LoggerFactory.getLogger(MyActionsApp.class);
    
    //handles post requests at URI /googleservice
    @PostMapping(path = "/", consumes = "application/json", produces = "application/json")
    public ResponseEntity<String> getPost(@RequestBody String payload, 
      @RequestHeader String header, HttpServletResponse response) throws IOException {
      //Not sure what to do here. 
    
    
    System.out.println(jsonData);
    
    return ResponseEntity.ok(HttpStatus.OK);
    try {
    
        //writeResponse(response, jsonResponse);
        //String med request body og object that has all request header entries
        String jsonResponse = actionsApp.handleRequest(body, listAllHeaders(header)).get();
    
    
        return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
    
    
    } catch (
            InterruptedException e) {
        System.out.println("Something wrong happened, interupted");
    } catch (
            ExecutionException e) {
        System.out.println("Something wrong happened, execution error");
    }
    

    }

1 Ответ

0 голосов
/ 11 июля 2019

Во-первых, в вашем коде есть ошибка. Может быть неправильный «возврат» перед вашей функциональной логикой.

return ResponseEntity.ok(HttpStatus.OK);

Во-вторых, поскольку вы используете Spring Framework и используете в методе «@RequestBody String payload», Spring Framework примет тело запроса и установит для него полезную нагрузку. Если вы установите полезную нагрузку в качестве определенного типа. Рамки будут десериализовать тело к нему.

Наконец, вы можете напрямую использовать полезную нагрузку в своем коде. Значением этого будет тело запроса.

Если вы хотите декодировать строку json. Вы можете использовать библиотеку org.json.

JSONObject obj = new JSONObject(payload);
String name = obj.optString("name");

Код получит значение name в json.

...