Сообщение Java MongoDB: 415 неподдерживаемых типов мультимедиа

#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:

У вас две проблемы:

  1. Опустить @Consumes(MediaType.APPLICATION_JSON) . Ваш запрос не имеет никакого отношения к json.
  2. @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 .