Not found error no message available
Я создал демонстрационный проект Spring Boot и внедрил Restful services, как показано здесь
@RestController
public class GreetingsController {
@RequestMapping(value=”/api/greetings”, method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getGreetings(){
return new ResponseEntity<String>(“Hello World”, HttpStatus.OK);
}
}
Когда я попытался вызвать службу с помощью инструмента Postman с URL “http://localhost:8080/api/greetings ” при получении метода запроса я получаю сообщение об ошибке ниже
{
“timestamp”: 1449495844177,
“status”: 404,
“error”: “Not Found”,
“message”: “No message available”,
“path”: “/api/greetings”
}
Для приложения Spring Boot мне не нужно настраивать сервлет Spring Dispatcher в web.xml .
Может ли кто-нибудь помочь мне найти здесь недостающий момент?
Ответ
Вероятно, вы что-то упускаете@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 который сканирует пакет, в котором он находится, и все дочерние пакеты. Ваш контроллер может отсутствовать ни в одном из них.
Ответы на ошибки REST при загрузке Spring
Формат ответов на ошибки из веб-служб REST всегда был для меня темой серой зоны. По моему мнению, какой бы формат вы ни выбрали, он должен предоставлять клиентам достаточно информации, используя веб-службы REST, чтобы клиенты могли корректно обрабатывать ситуации с ошибками. Spring Boot придерживается определенного мнения по этому поводу. В этой статье я покажу, как Spring Boot форматирует ответы на ошибки.
Пример веб-службы REST
Предположим, у нас есть веб-служба REST со следующей спецификацией:
HTTP Method and URL:
POST /some-resource
Request Headers:
Content-Type – application/json is allowed
Request JSON Body Attributes:
name (required) – type is string
age (required) – type is integer and should be between 0 and 100 inclusive
Ответы на ошибки
Давайте посмотрим примеры нескольких сообщений об ошибках, возвращаемых веб-службой REST при реализации с использованием Spring Boot. В каждом примере обратите внимание, какая вся информация отправляется службой обратно в теле ответа.
POST /some-resource with Content-Type as application/xml
В этом случае значение Content-Type заголовка не соответствует тому, которое поддерживает служба.
{
“timestamp”: 1467943353634,
“status”: 415,
“error”: “Unsupported Media Type”,
“exception”: “org.springframework.web.HttpMediaTypeNotSupportedException”,
“message”: “Content type ‘application/xml’ not supported”,
“path”: “/some-resource”
}
Механизм, лежащий в основе сообщений об ошибках весенней загрузки
Весенняя загрузка перенаправляет все сообщения об ошибках на /error сопоставление. У Spring Boot естьBasicErrorController, который обрабатывает отображение ошибок. Тела ответов, показанные выше, генерируются DefaultErrorAttributes.
Чтобы полностью заменить поведение по умолчанию, вы можете реализовать ErrorController и зарегистрировать определение компонента этого типа или просто добавить компонент типа ErrorAttributes, чтобы использовать существующий механизм, но заменить содержимое.