【问题标题】:Spring Boot Response Entity doesn't return JSONSpring Boot 响应实体不返回 JSON
【发布时间】:2017-02-17 11:15:03
【问题描述】:

当我从 RestController 返回我的 POJO 时,它会转换为 JSON 对象。 但是当我尝试返回new ResponseEntity<>("success", HttpStatus.CREATED); 控制器返回纯文本。怎么了?

我的 RestController:

    @RequestMapping(value = "/register", method = RequestMethod.POST,consumes = "application/json", produces="application/json")
public ResponseEntity<?>  registerUser(@RequestBody User user) throws MessagingException {
    if(registrationService.canRegister(user.getEmail())){
        registrationService.registerUser(user);
        logger.info("Registered user "+user.getEmail());
        return new ResponseEntity<>("success", HttpStatus.CREATED);
    }
    return new ResponseEntity<>(HttpStatus.CONFLICT);
}

我的依赖:

    <dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-java8</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-jwt</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Spring Boot 1.4.1 版

【问题讨论】:

    标签: java json spring spring-boot


    【解决方案1】:

    "success" 作为字符串不能转换为 JSON 格式。因此,spring控制器返回plain/text。一般来说,任何要转换为JSON的对象,都必须是键值对的格式,所以所有的POJO都可以转换成对应的键值对,其中key是属性名称和value 是属性的值。您可以查看此页面以验证构成有效 json 的内容。 https://jsonformatter.curiousconcept.com/

    【讨论】:

    • 添加到上面的答案 - 如果您不想创建新的 POJO 只是为了发送成功字符串,您可以创建一个 Map 并添加一个值为成功的键。
    • @rolson-quadras 谢谢你,这正是我想要的
    【解决方案2】:

    刚刚遇到同样的问题,并找到了解决问题的好方法:

    KeyValuePair value = new KeyValuePair("additionalAdress", user.getAdditionalEmail());
    
    return new ResponseEntity<>(value, HttpStatus.OK);
    

    在前端(在我的例子中是 Angular 2 / Typescript),您可以通过以下方式获取值:

    this.userService.updateAdditionalEmailOfCurrUser(this.additionalEmail).subscribe( (res: any) => {
            // handle success case here
            this.additionalEmail = res.value;               
        },
        () => {
            // handle error case here
        });
    

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 2018-02-13
      • 2021-02-20
      • 1970-01-01
      • 2022-07-31
      • 1970-01-01
      • 2017-12-04
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多