0

我正在构建我的第一个 API。GET 请求有效,但我被困在 POST 请求中,错误为 415 Unsupported mediatype。经过一番搜索和重写代码,它仍然失败。有人知道为什么吗?参数值为:

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

用户道:

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

POST 请求:

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

1 回答 1

2

你有两个问题:

  1. 省略@Consumes(MediaType.APPLICATION_JSON)。您的请求与 json 无关。
  2. @PathParams 应替换为@RequestParams。这些值被读取为请求参数(查询字符串)而不是路径部分。

此外,在请求示例中,您应该摆脱额外的/after 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.

于 2016-10-24T18:59:21.087 回答