Java MongoDB POST:415不支持的mediatype

时间:2016-10-24 12:22:20

标签: java mongodb api http http-status-code-415

我正在构建我的第一个API。 GET请求有效,但我遇到错误415不支持的mediatype的POST请求。经过一些搜索和重写代码后,它仍然失败。有人明白为什么吗?参数值为:

-String userName 
-String password
-String phone
-String email
-List roles

CODE: UserResource:

@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);
}

UserService:

public void createUser(User user){
userDAO.create(user);
}

UserDAO的:

public void create( User user )
{
    save( user );
}

POST请求:

localhost:8080/User/?userName=Daniel&password=test&phone=0634554567&email=daniel@email.com&roles=["OWNER"]

1 个答案:

答案 0 :(得分:2)

您有两个问题:

  1. 忽略@Consumes(MediaType.APPLICATION_JSON)。您的请求与json没有任何关系。
  2. @PathParam应替换为@RequestParam s。这些值将作为请求参数(查询字符串)读取,而不是作为路径部分读取。
  3. 此外,在请求示例中,您应该在/之后删除额外的User

    localhost:8080/User?userName=Daniel&...

    为了使用路径参数,您应该为资源方法配置添加路径注释,例如:

    @RequestMapping("/{userName}/{password}/{phone}/{email}/{roles}

    并且请求应该看起来像:

    localhost:8080/User/Daniel/test/0634554567/daniel/OWNER

    根本不直观

    最后一件事:List<String> roles错了。无论您使用路径还是查询参数,Spring都不会转换为字符串列表。您必须自己将角色拆分为数组(可能使用,作为分隔符)或提供Converter