我正在构建我的第一个API。 GET请求有效,但我陷在POST请求中,错误415不支持的媒体类型。经过一些搜索和重写代码后,它仍然失败。有人知道为什么吗?参数值为:

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


码:
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"]

最佳答案

您有两个问题:


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


同样,在请求示例中,您应该摆脱/之后的多余User

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

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

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

并且该请求应如下所示:

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

这一点都不直观

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

10-04 15:29