Как я могу прочитать JSON с заголовком и телом с пружинной загрузкой - PullRequest
0 голосов
/ 02 марта 2020

Доброе утро У меня небольшой запрос, я делаю небольшой веб-сервис отдых с весенней загрузкой, проблема в том, что он работает нормально, а все остальное, как я делаю следующим образом, получает параметр и возвращает ответ на основе для хранимого процесса в базе данных:

enter image description here

Но теперь я изменил запрос, и он включает заголовок и тело, как показано ниже:

{
  "ValidateClient": {
    "Header": {
        "country": "VE",
        "lang": "ES",
        "entity": "TMVE",
        "system": "76",
        "subsystem": "APP",
        "operation": "ValidateClient",
        "timestamp": "2019-10-23T08:48:08.474Z",
        "msgType": "REQUEST"
      },
    "Body": {
      "validateClientRequest": {
        "movil": "04141734272"
      }
   }
}
}

При выполнении которого он дает мне ответ о том, что мобильный не найден, это ответ по умолчанию, когда он не может прочитать параметр мобильного устройства или он пусто

enter image description here

Мой код

Основной класс

package com.app.validate;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ValidateClientApp {

    public static void main(String[] args) {
        SpringApplication.run(ValidateClientApp.class, args);
    }
}

Контроллер

package com.app.validate.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.app.validate.dao.ValidateClientAppRepository;
import com.app.validate.entity.DriverBonificados;
import com.app.validate.entity.ResponseVo;

@RestController
public class ValidateClientAppController {

    @Autowired
    private ValidateClientAppRepository dao; 

    @PostMapping(value = "/ValidateClientApp",consumes = "application/json",produces="application/json") 
    public ResponseVo ValidateClient(@RequestBody DriverBonificados driver) {
        //System.out.println(driver.getMovil()); 
        return dao.validarClienteBonifiado(driver.getMovil()); 
    }

}

Дао

package com.app.validate.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.app.validate.entity.DriverBonificados;
import com.app.validate.entity.ResponseVo;

@Repository
public interface ValidateClientAppRepository extends JpaRepository<DriverBonificados, Integer> {


    @Query(nativeQuery = true,value = "call ValidacionClienteBonificado(:movil)")
    ResponseVo validarClienteBonifiado(@Param("movil") String pMovil);

}

Сущность

package com.app.validate.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="DriverBonificados")
public class DriverBonificados {

    @Id
    private int id;     
    private String movil;
    private String contador;
    private Date fecha_driver;
    private Date fecha_alta;
    private Date fecha_fin;
    private Date codigo_transaccion;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getMovil() {
        return movil;
    }
    public void setMovil(String movil) {
        this.movil = movil;
    }
    public String getContador() {
        return contador;
    }
    public void setContador(String contador) {
        this.contador = contador;
    }
    public Date getFecha_driver() {
        return fecha_driver;
    }
    public void setFecha_driver(Date fecha_driver) {
        this.fecha_driver = fecha_driver;
    }
    public Date getFecha_alta() {
        return fecha_alta;
    }
    public void setFecha_alta(Date fecha_alta) {
        this.fecha_alta = fecha_alta;
    }
    public Date getFecha_fin() {
        return fecha_fin;
    }
    public void setFecha_fin(Date fecha_fin) {
        this.fecha_fin = fecha_fin;
    }
    public Date getCodigo_transaccion() {
        return codigo_transaccion;
    }
    public void setCodigo_transaccion(Date codigo_transaccion) {
        this.codigo_transaccion = codigo_transaccion;
    }

}

Сохраненный отклик интерфейса

package com.app.validate.entity;

public interface ResponseVo {

    String getCode();
    String getResult();
}

enter image description here

Как можно прочитать Json с заголовком и тело? Я новичок в весенней загрузке

ОБНОВЛЕНИЕ

В соответствии с тем, что сказал Сильверфанг, я создал классы, которые он сказал, но я получаю сообщение об ошибке, которое я опишу далее:

BodyRequest. java

 public class BodyRequest {

    private String validateClientRequest;
    private String movil;

    public String getValidateClientRequest() {
        return validateClientRequest;
    }
    public void setValidateClientRequest(String validateClientRequest) {
        this.validateClientRequest = validateClientRequest;
    }
    public String getMovil() {
        return movil;
    }
    public void setMovil(String movil) {
        this.movil = movil;
    }

}

HeaderRequest. java

package com.app.validate.controller;

import java.util.Date;

public class HeaderRequest {

    private String country;
    private String lang;
    private String entity;
    private String system;
    private String subsystem;
    private String operation;
    private Date timestamp;
    private String msgType;
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public String getLang() {
        return lang;
    }
    public void setLang(String lang) {
        this.lang = lang;
    }
    public String getEntity() {
        return entity;
    }
    public void setEntity(String entity) {
        this.entity = entity;
    }
    public String getSystem() {
        return system;
    }
    public void setSystem(String system) {
        this.system = system;
    }
    public String getSubsystem() {
        return subsystem;
    }
    public void setSubsystem(String subsystem) {
        this.subsystem = subsystem;
    }
    public String getOperation() {
        return operation;
    }
    public void setOperation(String operation) {
        this.operation = operation;
    }
    public Date getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }
    public String getMsgType() {
        return msgType;
    }
    public void setMsgType(String msgType) {
        this.msgType = msgType;
    }

}

RequestBodyDemo. java

package com.app.validate.controller;

public class RequestBodyDemo {

    private ValidateClientRequest ValidateClient;

    public ValidateClientRequest getValidateClient() {
        return ValidateClient;
    }

    public void setValidateClient(ValidateClientRequest validateClient) {
        ValidateClient = validateClient;
    }

}

ValidateClientRequest

package com.app.validate.controller;

public class ValidateClientRequest {

    private BodyRequest Body;
    private HeaderRequest Header;

    public BodyRequest getBody() {
        return Body;
    }
    public void setBody(BodyRequest body) {
        Body = body;
    }
    public HeaderRequest getHeader() {
        return Header;
    }
    public void setHeader(HeaderRequest header) {
        Header = header;
    }

}

Мой контроллер (обновление)

package com.app.validate.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.app.validate.dao.ValidateClientAppRepository;
import com.app.validate.entity.DriverBonificados;
import com.app.validate.entity.ResponseVo;

@RestController
public class ValidateClientAppController {

    @Autowired
    private ValidateClientAppRepository dao; 

    @PostMapping(value = "/ValidateClientApp",consumes = "application/json",produces="application/json") 
    public ResponseVo ValidateClient(@RequestBody  RequestBodyDemo req) {
        System.out.println(req.getValidateClient().getBody().getMovil());

        return dao.validarClienteBonifiado(req.getValidateClient().getBody().getMovil()); 
    }

}

Я получаю ошибку:

enter image description here

enter image description here

1 Ответ

1 голос
/ 02 марта 2020

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

Я думаю, что вы пытались добавить поля в заголовок. То, что вы делаете здесь, не является правильным способом сделать это. Это должно идти в header section, а не в body section приложения Почтальон. Но при этом вам придется указывать эти заголовки отдельно, так как это пользовательские заголовки, над которыми будет много работы.

Answer to your question

Исходя из того, что вы пытались сделать. С тех пор вы изменили тело запроса. Вам также придется вносить изменения в класс контроллера. Теперь потребуется три класса, если вы хотите сделать это модульным способом.

Первым классом будет BodyRequest. java

private string validateClientRequest;
private string movil;

Следующим классом будет HeaderRequest. java

private string country;
private string lang;
private string entity;
private string system;
private string subsystem;
private string operation;
private Date timestamp;
private string msgType;

Следующим классом будет ValidateClientRequest. java

private HeaderRequest Header;
private BodyRequest Body;

Теперь для класса RequestBodyDemo;

private ValidateClientRequest ValidateClient;

Примечание. Используйте соответствующие Getter и setter вместе с @JsonProperty, если вы маскируете входной запрос данные.

Как только все это будет сделано. В вашем контроллере вместо использования Entity в @RequestBody используйте класс RequestBodyDemo. Как только это будет сделано. Просто попробуйте распечатать значения, чтобы проверить, правильно вы их понимаете или нет. Затем используйте getter для извлечения любого нужного вам значения.

Редактировать:

  public ResponseVo ValidateClient(@RequestBody  RequestBodyDemo req) {
        System.out.println(req.getValidateClient().getBodyrequest().getMovil()); 

        return dao.validarClienteBonifiado(req.getValidateClient().getBodyrequest().getMovil()); 
    }

Примечание: используйте соответствующий метод получения здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...