Вы можете использовать функцию jQuery.getScript()
... Я думаю, вам будет намного легче с этим включить файл JavaScript .js
.
Здесь является ссылкой.
Это мой типичный код контроллера REST для запроса «получить пользователя по id»:
@RestController
@RequestMapping("/users") // 1
public class UserController {
private final UserRepo userRepo;
public UserController(UserRepo userRepo) {
this.userRepo = userRepo;
}
@GetMapping("/{id}") // 2
public ResponseEntity getById(@PathVariable("id") Long id) { // 3
return userRepo.findById(id) // 4
.map(UserResource::new) // 5
.map(ResponseEntity::ok) // 6
.orElse(ResponseEntity.notFound().build()); // 7
}
}
Где:
1 - общий пусковой путь для всех запросов управляемый этим контроллером
2 - шаблон переменной пути запроса GET (/users/{id}
).
3 - укажите имя переменной пути, имя которой соответствует параметру в GetMapping
. Тип параметра в методе getById
соответствует типу User
ID.
4 - Я использую метод findById
для моего UserRepo
, который возвращает Optional
5 - Здесь я преобразовываю User
в некоторый тип DTO - UserResource
(это необязательный шаг)
6 - возвращает OK
ответ, если User
найдено
7 - или вернуть ответ Not Found
в противном случае.
Я также использую шаблон контроллера-службы-репозитория в нескольких проектах, и вот как я его выкладываю:
@RestController // 1
@RequestMapping(value = "/users") // 2
public class UserController {
private final UserService userService;
@Autowired // 3
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping(value = "/{user_id}", method = RequestMethod.GET) //4
@ResponseStatus(HttpStatus.OK) //5
public UserModel getUser(@PathVariable(value="user_id") long user_id) { //6
return userService.getUserById(user_id);
}
@RequestMapping(method = RequestMethod.POST) // 7
@ResponseStatus(HttpStatus.CREATED) // 8
public UserModel getUser(@ResponseBody UserModel userModel) { // 9
return userService.createUser(usermodel);
}
}
1) @RestController представляет собой комбинацию @Controller и @ResponseBody, что по существу означает, что каждый метод в вашем классе будет иметь тело ответа.
2) Префикс @RequestMapping значения в этом классе с / users
3) Autowiring в Constructor является самым безопасным подходом к инъекции bean-компонентов.
4) Этот метод будет доступен через запрос GET для / users / {user_id}
5) Этот метод вернет код состояния HttpStatus.OK при успешном завершении (200)
6) Извлекает переменную пути «user_id» из запроса. Используйте тот же числовой тип, что и ваш идентификатор пользователя (т.е. int или long).
7) Этот метод будет доступен через запрос POST для / users
8) Этот метод будет return HttpStatus.CREATED код состояния при успехе (201)
9) Извлекает UserModel из тела запроса (должен иметь ту же структуру, что и json, указанный ниже).
Нет реальных отличий от Cepr0 и моего подхода, это чисто предпочтение стиля.
UserModel может быть классом следующим образом:
public class UserModel {
private String username;
// Constructor, Getter, Setter...
}
И это вернет объект JSON в тело ответа следующим образом:
{
"username":"username"
}
Если вы хотите обрабатывать Исключения в своем контроллере (и даже управлять данные, возвращаемые исключением, вы можете использовать @ExceptionHandler следующим образом:
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponseWrapper> handleGenericException(Exception ex){
return ResponseEntity
.status(HttpStatus.I_AM_A_TEAPOT)
.body(new CustomExceptionWrapper(ex)));
}
Где CustomExceptionHandler преобразует исключения, созданные вашим приложением, в формат, который вы решите (это также может быть POJO, а Spring Boot преобразует его в JSON для вас!) [/ g17]
Чтобы более точно ответить на ваши вопросы: 1) Вы должны выбросить исключение, если пользователь не будет найден, который будет включать в себя статус ответа 404 (NOT FOUND). Возвращение null - это, как правило, плохая идея, поскольку это может означать много чего.
1.1?) Если ваш пользователь отправляет недопустимую строку, вы можете посмотреть, какое исключение оно вызывает на вашем сервере, и использовать обработчик исключений, чтобы справиться с ним и вернуть соответствующий ответ (возможно, BAD_REQUEST?)
2) Да, используйте long, если ваши идентификаторы использования длинны.
Проверьте сайт baeldung , действительно рекомендуют их для изучения Spring Boot.
@ExceptionHandler
здесь - хороший способ сделать больше, чем обработка по умолчанию Spring, когда запрос ввода недопустим. Например, когда id не является допустимым длинным значением.
– dbreaux
13 July 2018 в 13:37
@RestController
, либо аннотировать метод с помощью@ResponseBody
) и сериализовать его в JSON. Вы также можете установить статус ответа с помощью@ResponseStatus
для успешных ответов, например HttpStatus.NOT_FOUND – Jordan Mackie 13 July 2018 в 12:25ResponseEntity
, как показано здесь, кажется наиболее мощным и amp; полезно, но другой подход тоже работает. – dbreaux 13 July 2018 в 13:36