#java #mongodb #api #http #http-status-code-415
#java #mongodb #API #http #http-status-code-415
Вопрос:
Я создаю свой первый API. Запрос GET работает, но я застрял в запросе POST с ошибкой 415 Неподдерживаемый тип среды. После некоторого поиска и перезаписи кода все еще происходит сбой. Кто-нибудь понимает, почему? Значения параметров являются :
-String userName
-String password
-String phone
-String email
-List roles
код:
Пользовательский ресурс:
@RolesAllowed("OWNER")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void create(@PathParam( "userName" ) String userName,@PathParam( "password" ) String password,@PathParam( "phone" ) String phone,@PathParam( "email" ) String email,@PathParam( "roles" ) List<String> roles)
{
User user = new User();
user.setName(userName);
user.setPassword(password);
user.setPhone(phone);
user.setEmail(email);
user.setRoles(roles);
userService.createUser(user);
}
Пользовательский сервис:
public void createUser(User user){
userDAO.create(user);
}
UserDao:
public void create( User user )
{
save( user );
}
запрос POST:
localhost:8080/User/?userName=Danielamp;password=testamp;phone=0634554567amp;email=daniel@email.comamp;roles=["OWNER"]
Ответ №1:
У вас две проблемы:
- Опустить
@Consumes(MediaType.APPLICATION_JSON)
. Ваш запрос не имеет никакого отношения к json. @PathParam
s следует заменить на@RequestParam
s. Значения считываются как параметры запроса (строка запроса), а не как части пути.
Кроме того, в примере запроса вы должны избавиться от лишнего /
после User
:
localhost:8080/User?userName=Danielamp;...
Чтобы использовать параметры пути, вы должны добавить аннотацию пути к конфигурации метода ресурса, что-то вроде:
@RequestMapping("/{userName}/{password}/{phone}/{email}/{roles}
и запрос должен выглядеть примерно так:
localhost:8080/User/Daniel/test/0634554567/daniel/OWNER
Который совсем не интуитивно понятен
И последнее: List<String> roles
это неправильно. Spring не преобразуется в список строк, независимо от того, используете ли вы path или параметр запроса. Вам придется самостоятельно разделить роли в массиве (возможно, используя ,
в качестве разделителя) или предоставить Converter
.