Как получить данные в формате JSON из хранилища БД - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть этот класс JPA, где у меня есть 3 столбца id , name и date . База данных уже заполнена данными, где каждая запись имеет идентификатор.

@Data
@Entity
@Table(name = "TEST", schema = "TESTSCHEMA")
public class TestDataJpaRecord implements Serializable {
    private static final long serialVersionUID = 1L;

    TestDataJpaRecord(){
        // default constructor
    }

    public TestDataJpaRecord(
       String name,
       Date date,
    ){
        this.name = name;
        this.date = date;
    }

    @Id
    @Column(name = "ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator = "TEST_SEQUENCE")
    @SequenceGenerator(
            sequenceName = "TEST_SEQUENCE", allocationSize = 1,
            name = "TEST_SEQUENCEx")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE")
    private Date date;
}

Я создал репозиторий JPA для всех данных.

public interface TestDataJpaRecordRepository extends JpaRepository<TestDataJpaRecord, Long> {
}

Я хочу получить данные из БД в формате JSON. Вот мой отдых GET Api. Здесь я возвращаю данные только в виде строки, но хочу вернуть их как JSON.

@GetMapping(value = "data/{id}")
    private ResponseEntity<?> getDataFromTheDB(@PathVariable("id") Long id) {

        // get one entry form the DB
        TestDataJpaRecord testDataJpaRecord =testDataJpaRecordRepository.findOne(id); 

        // Here I want to return a JSON instead of a String 
        return new ResponseEntity<>(testDataJpaRecord.toString(), HttpStatus.OK);
    }

Есть идеи о том, как я могу вернуть данные как JSON, а не как строку из БД? Я был бы очень признателен за любое предложение.

1 Ответ

0 голосов
/ 04 февраля 2020

Если у вас есть Джексон на пути к классам, который вы должны использовать, если вы использовали spring-boot-starter-web, тогда просто:

@GetMapping(value = "data/{id}")
private ResponseEntity<TestDataJpaRecord> getDataFromTheDB(@PathVariable("id") Long id) {
    TestDataJpaRecord testDataJpaRecord =testDataJpaRecordRepository.findOne(id); 
    return new ResponseEntity.ok(testDataJpaRecord);
}

Это предполагает, что вы пометили свой контроллер с @RestController вместо @Controller. Если нет, то вы можете сделать это или аннотировать ваш метод контроллера с помощью @ResponseBody.

С включенной веб-поддержкой Spring Data (что должно быть по умолчанию в Spring Boot), тогда вы также можете упростить, как показано ниже:

@GetMapping(value = "data/{id}")
private ResponseEntity<TestDataJpaRecord> 
         getDataFromTheDB(@PathVariable("id") TestDataJpaRecord record) {
    return new ResponseEntity.ok(record);
}

См .:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core .web.basi c .domain-class-converter

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