Java 如何创建从用户数组返回JSON的@Restcontroller
一段时间以来,我一直在努力解决这个挑战。我是一名JavaScript开发人员,但一直在试用SpringBoot和Java,遇到了一个问题。在下面的代码中,我需要弄清楚如何编写Java 如何创建从用户数组返回JSON的@Restcontroller,java,spring,Java,Spring,一段时间以来,我一直在努力解决这个挑战。我是一名JavaScript开发人员,但一直在试用SpringBoot和Java,遇到了一个问题。在下面的代码中,我需要弄清楚如何编写@RestController逻辑,从下面在User类中创建的用户列表中返回JSON。我不知道该怎么做,因为这对我来说都是新鲜事 package usersExample; import org.springframework.web.bind.annotation.RestController; import org.s
@RestController
逻辑,从下面在User类中创建的用户列表中返回JSON。我不知道该怎么做,因为这对我来说都是新鲜事
package usersExample;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
@RestController
public class UsersController {
/* Please insert your code here to make the tests pass */
}
@Service
class UserService {
public List<User> all() {
List<User> users = new ArrayList<User>();
users.add(new User("Bob"));
users.add(new User("Christina"));
users.add(new User("Steve"));
return users;
}
}
class User {
private final String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
package用户示例;
导入org.springframework.web.bind.annotation.RestController;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.ResponseBody;
导入org.springframework.stereotype.Service;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.concurrent.AtomicLong;
@RestController
公共类用户控制器{
/*请在此处插入代码以使测试通过*/
}
@服务
类用户服务{
公共列表全部(){
列表用户=新建ArrayList();
添加(新用户(“Bob”);
添加(新用户(“克里斯蒂娜”);
添加(新用户(“Steve”);
返回用户;
}
}
类用户{
私有最终字符串名;
公共用户(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
}
因为您使用的是@RestController
,所以返回值已经是JSON(spring boot进行转换时不添加其他依赖项,因为它已经包含Jackson库)。
您只需在控制器中创建一个方法,该方法将返回用户的列表。关于代码的一点意见是:使用适当的方法名,如findAll()
,而不是all()
转换器将查找以get
关键字开头的方法,并将其后的所有内容设置为属性名称,第一个字母转换为小写,这意味着唯一的属性(因为您只有一个getter)将如下所示:name:-此处的值-
现在您可能会问一些问题,如:
(一)
Q:如果将getName()
方法更改为getName()
,会发生什么情况
A:也会起同样的作用
(二)
Q:如果不为字段提供getter,会发生什么
A:该字段不会转换为JSON属性
(三)
Q:如果将getName()
方法更改为getMyName()
,会发生什么情况
A:属性名称将是myName:-value-
因此,如果已经说过,如果您想更改JSON结构,有很多解决方案:
1) 更改getter名称(不推荐)
2) 使用@JsonProperty注释。例如:
private String name;
@JsonProperty("name")
public String thismethodwontworkwithoutjsonproperty() {
return this.name;
}
3) 创建一个DTO对象UserDTO
,并返回该对象,而不是User
。在控制器中,您可以将用户转换为userDTO对象
public class UserDTO {
private String fullName;
//getter; setter;
}
及
最后,你可以这样进行转换:
@GetMapping("/getUser")
public User returnUser() {
User user = new User();
user.setFirstName("Stack");
user.setLastName("Overflow");
UserDto userDto = convertUser(user);
return userDto;
}
private UserDTO convertUser(User user) {
UserDTO userDTO = new UserDTO();
userDTO.setFullName(user.getFirstName() + " " + user.getLastName());
return userDTO;
}
但是我建议您构造应用程序并添加一个facade
层,该层将进行此转换,而不是在控制器中创建convertUser()
方法
输出:
{
"fullName":"Stack Overflow";
}
令人惊叹的。谢谢。我一定会记住的。目前,这就是我被指示编写程序的方式。然而,你编写的代码并不能帮助我解决手头的问题。我似乎仍然无法以所需的格式返回数据。我已经提供了有关您问题的更多详细信息。。也许它会帮助你实现你所需要的,并理解这个springboot
是如何工作的。非常感谢你。这确实帮助我更好地理解了逻辑。我真的很感激。我很高兴能帮上忙。你期望的输出格式是什么?
public class User {
private String firstName;
private String lastName;
//getter;setter;
}
@GetMapping("/getUser")
public User returnUser() {
User user = new User();
user.setFirstName("Stack");
user.setLastName("Overflow");
UserDto userDto = convertUser(user);
return userDto;
}
private UserDTO convertUser(User user) {
UserDTO userDTO = new UserDTO();
userDTO.setFullName(user.getFirstName() + " " + user.getLastName());
return userDTO;
}
{
"fullName":"Stack Overflow";
}