Как реализовать загрузочный контроллер пружины, чтобы вернуть результат запроса в виде JSON - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь написать пружинный загрузочный контроллер, который может вернуть результат нативного запроса как json. Я буду передавать запрос в качестве входного параметра, и возвращение должно быть результатом запроса. Есть ли способ сделать это? Я знаю, http http помощь по этому вопросу. Запрос может быть любым, и система должна принять его и ответить с результатом в виде json.

Например, если я передаю запрос как select * from employee, он должен ответить с результатом запроса как json.

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Вы можете использовать Spring JDBC для этого,

Repo

@Repository
public class FooRepo {

  @Autowire
  private JdbcTemplate jdbcTemplate;

  public Object returnDataForQuery(String sql) {
    return jdbcTemplate.queryForObject(sql, Object.class); // You could define a proper class if you know the return Type else returning plain object is more then enough
    // return jdbcTemplate.queryForList(sql, Object.class) Incase Multiple Data
  }
}

Модель

public class FooDto {

  private String query;

  // Getter, Setter & No Args Constructor (or) Lombok

}

Контроллер


@Autowire 
private FooRepo fooRepo;

@PostMapping(value = "/postData", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity postData(@RequestBody FooDto foo) {
    return ResponseEntity.ok(fooRepo.returnDataForQuery(foo.getQuery);
}

Это просто обзор, вы можете его согнуть. Что касается вывода результатов, то об этом позаботится ResponseEntity

0 голосов
/ 10 июня 2019

SpringBoot

// Класс контроллера

@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;

     @GetMapping("/all")
    public List<Employee> getAllEmplpyee() {
        logger.info("get All Employeee");
        return employeeService.getAllEmployeeService();
    }
}

// ServiceImpl

@Service
public class EmployeeService {
    private static final Logger logger = LoggerFactory.getLogger(EmployeeService.class);

    @Autowired
    private EmployeeRepository employeeRepository;


    public List<Employee> getAllEmployeeService() {
        logger.info(getClass().getName(),"  invked getAllEmployee");
        List<Employee>    empBo = employeeRepository.findAll();
        return copyPropertiesValues(empBo);

    }
}

// DAO

@Component
public interface EmployeeRepository extends JpaRepository<Employee, String>{    
}

// Модель

@Entity
@Table(name = "employees")
public class Employee {

    @Id
    @Column(name = "employeeNumber",nullable=false)
    private String employeeNumber;
    @Column(nullable=false)
    private String lastName;
    @Column(nullable=false)
    private String firstName;
    @Column(nullable=false)
    private String extension;
    @Column(nullable=false)
    private String email;
    @Column( nullable=false)
    private String officeCode;
    @Column(nullable=false)
    private String reportsTo;
    @Column(nullable=false)
    private String jobTitle;
  //GETTER SETTER
}

// application.properties

spring.jpa.hibernate.ddl-auto=update
spring.jpa.open-in-view=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql=trace
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=****
0 голосов
/ 10 июня 2019

Если вы передаете запрос своему контроллеру, сначала вам нужно преобразовать его в формат JSON, а затем использовать import com.google.gson. *; библиотека для работы с объектами JSON. В моем случае я использовал: JSON формат

{"obj": {"query": "Select * From Employee"}}

и RestController

@PostMapping( value = "/getData")
public String controllerFunction(HttpServletRequest req, @RequestBody String obj) {
   return serviceName.functionName(Json.gson(obj).get("query").getAsJsonObject()).toString();
    } 

затем In Spring Boot Service возвращает объект json

public JsonObject functionName(JsonObject data) {
   JsonObject json = new JsonObject();
    try {
        JsonObject datajson = new JsonObject();
        datajson.addProperty("columnName" ...); 
     json.add("propname", datajson);
   }catch (Exception e) {
}
return json;

}

Надеюсь, это поможет.

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