Невозможно выполнить запрос POST в Spring Boot

Я пытаюсь создать веб-службы в JAVA Spring boot с серверной частью как SQL Server 2012. Я следовал руководству с этого веб-сайта https://www.callicoder.com/spring-boot-rest-api-tutorial-with-mysql-jpa-hibernate/.

Единственное изменение, которое я сделал, - изменил application.properties как

spring.datasource.url=jdbc:sqlserver://localhost;databaseName=SampleSpringDB
spring.datasource.username=sa
spring.datasource.password=sqlpassword
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.hibernate.ddl-auto = create-drop

Tomcat не показывает ошибок при запуске приложения.

При тестировании метода POST в Postman я получаю ошибку в почтальоне как

{
"timestamp": "2018-11-21T04:44:06.474+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/notes/"
}

Код полностью скопирован с вышеупомянутого сайта.

Код для контроллера

    @RestController
    @RequestMapping(value = "/api", produces = "application/json")

public class NoteController {

@Autowired
NoteRepository noteRepository;

// Create Note
@PostMapping("/notes")
public Note createNote(@Valid @RequestBody Note note) {
    return noteRepository.save(note);
}

// Get all notes
@GetMapping("/notes")
public List<Note> getAllNotes() {
    return noteRepository.findAll();
}

// Get Single Note
@GetMapping("/notes/{id}")
public Note getNoteById(@PathVariable(value = "id") Long noteID) {
    return noteRepository.findById(noteID).orElseThrow(() -> new ResourceNotFoundException("Note", "id", noteID));
}

// Update Note
@PutMapping("/notes/{id}")
public Note updateNote(@PathVariable(value = "id") Long noteID, @RequestBody Note noteDetails) {
    Note note = noteRepository.findById(noteID)
            .orElseThrow(() -> new ResourceNotFoundException("Note", "id", noteID));
    note.setTitle(noteDetails.getTitle());
    note.setContent(noteDetails.getContent());

    Note updatedNote = noteRepository.save(note);
    return (updatedNote);
}

// Delete Note
@DeleteMapping("/notes/{id}")
public ResponseEntity<?> deleteNote(@PathVariable(value = "id") Long noteID) {
    Note note = noteRepository.findById(noteID)
            .orElseThrow(() -> new ResourceNotFoundException("Note", "id", noteID));
    noteRepository.delete(note);
    return ResponseEntity.ok().build();
}

}

POSTMAN POST url

локальный: 8080 / API / примечания / параметры тела как {"title": "test", "content": "test"}

Пожалуйста, опубликуйте свой код контроллера и URL-адрес, который попадает в почтальон.

Jignesh M. Khatri 21.11.2018 06:08

Попробуйте: localhost:8080/api/notes. Удаление косой черты в конце

Jignesh M. Khatri 21.11.2018 06:12

Это был application.properties на этом веб-сайте spring.datasource.url = jdbc: mysql: // localhost: 3306 / notes_app? UseSSL = false spring.datasource.username = root spring.datasource.password = root ## Hibernate Properties # Диалект SQL позволяет Hibernate лучше генерировать SQL для выбранной базы данных spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect # Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl -auto = обновить

rahul ramakrishnan 21.11.2018 06:12

вы можете поделиться классом Notes?

GauravRai1512 21.11.2018 06:14

localhost: 8080 / api / notes также был протестирован, но получил ту же ошибку @ JigneshM.Khatri

rahul ramakrishnan 21.11.2018 06:14

Не могли бы вы предоставить трассировку журнала tomcat при переходе по этому URL-адресу от почтальона.

Jignesh M. Khatri 21.11.2018 06:22

@Kartik, это действующий URL .. см. Здесь github.com/springframeworkguru/spring-boot-mssqlserver/blob/‌…

Alien 21.11.2018 06:25

При переходе по ссылке @ JigneshM.Khatri журналы не создаются.

rahul ramakrishnan 21.11.2018 06:28

Тогда, вероятно, он не доходит до вашего проекта. Какое значение установлено на contextPath? Я думаю, вам не хватает contextPath в вашем URL-адресе в почтальоне

Jignesh M. Khatri 21.11.2018 06:29

Скорее всего, название вашего проекта должно быть contextPath. Как то так - http://localhost:8080/<contextPath>/api/notes

Jignesh M. Khatri 21.11.2018 06:30

localhost: 8080 / easy_notes / api / notes тоже пробовал, но та же проблема @ JigneshM.Khatri

rahul ramakrishnan 21.11.2018 06:33

Добавьте это в свой application.properties - server.servlet.contextPath=/easy_notes, а затем попробуйте localhost:8080/easy_notes/api/notes. После внесения этих изменений вам необходимо перезапустить tomcat

Jignesh M. Khatri 21.11.2018 06:36

добавлен server.servlet.contextPath = / easy_notes. Но та же проблема сохраняется @ JigneshM.Khatri

rahul ramakrishnan 21.11.2018 06:41

Ваш кот работает на 8080?

Jignesh M. Khatri 21.11.2018 06:47

да @ ДжигнешМ.Хатри. Tomcat запущен на портах: 8080 (http) с контекстным путем '/ easy_notes'

rahul ramakrishnan 21.11.2018 06:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
15
748
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Можете ли вы сделать быструю проверку, добавили ли вы @SpringBootApplication:

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

@SpringBootApplication
public class Application {

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

@SpringBootApplication включает @ComponentScan, который сканирует пакет, в котором он находится, и все дочерние пакеты. Ваш контроллер может не входить ни в один из них.

Приведенные ниже аннотации есть в классе SpringBootApplication EnableJpaAuditing ComponentScan (basePackageClasses = NoteRepository.class)

rahul ramakrishnan 21.11.2018 08:09

удалите @ComponentScan и проверьте еще раз и попробуйте собрать все ваши классы в одном пакете

Vipul Kumar 21.11.2018 08:19

Вы добавили коннектор sqlserver в pom.xml? Если добавлено, пропустите этот ответ, и я удалю его. Я протестировал ваш код на сервере mysql, он работает нормально.

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
</dependency>

я добавил <dependency> <groupId> com.microsoft.sqlserver </groupId> <artifactId> mssql-jdbc </artifactId> <version> 6.2.2.jre8 </version> </dependency> Я не пробовал ваш метод . Попробую и дам обновление

rahul ramakrishnan 21.11.2018 13:31
Ответ принят как подходящий

Эта проблема была исправлена ​​(странным образом) Я создал тот же проект с бэкэндом, что и MySQL, и протестировал сервис. Все работало нормально. Затем я добавил зависимость SQL-сервера

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>

в pom.xml и изменил application.properties на

spring.datasource.url=jdbc:sqlserver://localhost;databaseName=SampleSpringDB
spring.datasource.username=sa
spring.datasource.password=password
spring.datasource.driverClassName=
com.microsoft.sqlserver.jdbc.SQLServerDriver spring.jpa.show-sql=true 
spring.jpa.properties.hibernate.dialect=
org.hibernate.dialect.SQLServer2012Dialect spring.jpa.hibernate.ddl-auto 
= create-drop

Тем самым все прошло нормально.

Другие вопросы по теме