【问题标题】:Return some object in my Json在我的 Json 中返回一些对象
【发布时间】:2016-06-26 19:12:43
【问题描述】:

我的 userController.java:

@RestController
public class UserController {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
    private final UserService userService;

    @Inject
    public UserController(final UserService userService) {
        this.userService = userService;
    }

    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public List<User> listUsers() {
        LOGGER.debug("Received request to list all users");
        return userService.getList();
    }



    @ExceptionHandler
    @ResponseStatus(HttpStatus.CONFLICT)
    public String handleUserAlreadyExistsException(UserAlreadyExistsException e) {
        return e.getMessage();
    }

}

User.java:

@Entity
public class User {

    @Id
    @NotNull
    @Size(max = 64)
    @Column(name = "id", nullable = false, updatable = false)
    private String id;

    @NotNull
    @Size(max = 64)
    @Column(name = "name", nullable = false)
    private String name;

    @NotNull
    @Size(max = 64)
    @Column(name = "firstname", nullable = false)
    private String firstname;

    @NotNull
    @Size(max = 64)
    @Column(name = "email", nullable = false)
    private String email;

    @NotNull
    @Size(max = 64)
    @Column(name = "password", nullable = false)
    private String password;

    @Transient
    private List<Events> events;

    public User() {
    }

    public User(String id, String name, String firstname, String email, String password) {
        super();
        this.id = id;
        this.name = name;
        this.firstname = firstname;
        this.email = email;
        this.password = password;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<Events> getEvents() {
        return events;
    }

    public void setEvents(List<Events> events) {
        this.events = events;
    }

    @Override
    public String toString() {
        return Objects.toStringHelper(this).add("id", id).add("name", name).add("firstname", firstname)
                .add("email", email).add("password", password).add("events", events).toString();
    }
}

可以在我的JSON 中重新调整name和firstname

我的 pom.xml:

<!-- Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.0.1.RELEASE</version>
</parent>
...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
...

【问题讨论】:

    标签: json spring-boot


    【解决方案1】:

    您可以使用@JsonView 来控制渲染的内容。您可以在这篇 Spring 博客文章中找到更多详细信息 https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring

    假设你有这个带有接口Summary的View类

    public class View {
        interface Summary {}
    }
    

    然后您可以像这样注释您的属性:

    @JsonView(View.Summary.class)
    private String name;
    
    @JsonView(View.Summary.class)
    private String firstname;
    

    然后是你的请求映射:

    @JsonView(View.Summary.class)
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    

    这只会在结果 JSON 中返回 name 和 firstname。

    【讨论】:

    • 不行,还是显示所有数据,没有过滤任何数据。
    • 你使用的是什么版本的 Spring Boot?
    • spring-boot-1.0.1.RELEASE.jar
    • Spring Boot 1.0.x 使用 Spring 4.0.5 github.com/spring-projects/spring-boot/blob/1.0.x/… 在 Spring 4.1 中添加了对 @JsonView 的支持。因此,您需要尝试最新版本的 Spring Boot 才能使用它。
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多