我正在构建我的第一个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 protected]&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
。