【发布时间】:2021-06-06 12:24:52
【问题描述】:
我正在使用 keycloak 和 spring 来获取 rest 服务中的用户列表,但是其余的返回 html 而不是 json 数据。
这里是服务。
import org.keycloak.representations.idm.UserRepresentation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
@Autowired
KeycloakInstance keycloakInstance;
public List<UserRepresentation> loadUsers(String realm) {
return keycloakInstance.getInstance()
.realm(realm)
.users()
.list();
}
}
这里是控制器。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.keycloak.representations.idm.UserRepresentation;
import java.util.List;
@RestController
@RequestMapping("/api/admin/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping(value = "", produces="application/json")
public List<UserRepresentation> loadUsers() {
String realm = "abc";
return userService.loadUsers(realm);
}
}
知道如何解决这个问题吗?
【问题讨论】:
-
您确定您的控制器调用正确吗?还是过滤器链将您重定向到其他页面?您可以尝试调试对 loadUsers 方法的调用。如果您的呼叫有效,您应该检查您的类路径中有一个 HttpMessageConverter 类型的 bean,用于媒体类型 application/json。您能否提供有关您的应用程序设置的更多详细信息?
-
@GetMapping(value = "",produces="application/json") 下面添加的@ResponseBody 注解有什么区别?它是否提供了您需要的 JSON?
-
@Ashish 它不是返回 json 而是返回一个 html
-
loadUsers() 方法的空路径似乎导致 Spring 使用保留为默认值的 Controller 参数。使用以下内容设置控制器的默认值:@RequestMapping("/api/admin/users", produces="application/json")将所有方法设置为返回json,除非被覆盖。