简体   繁体   English

Spring Boot 响应实体不返回 JSON

[英]Spring Boot Response Entity doesn't return JSON

When i return my POJO from RestController it's transforms in JSON object.当我从 RestController 返回我的 POJO 时,它会在 JSON 对象中进行转换。 But when i try to return new ResponseEntity<>("success", HttpStatus.CREATED);但是当我尝试返回new ResponseEntity<>("success", HttpStatus.CREATED); controller returns plain-text.控制器返回纯文本。 What's wrong?怎么了?

My 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);
}

My dependencies:我的依赖:

    <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 version 1.4.1 Spring Boot 版本 1.4.1

"success" as a String cannot be cast to JSON format. "success"作为字符串不能转换为 JSON 格式。 Hence, spring controller returns plain/text.Generally, for any object to be cast as JSON, it must be in the format of a key value pair, so all POJOs can be converted to corresponding key-value pairs where key is the property name and value is property's value.因此,spring controller返回的是plain/text。一般来说,任何对象被转换为JSON,它必须是键值对的格式,所以所有的POJO都可以转换成对应的键值对,其中key是属性名和value是财产的价值。 You can have a look at this page to validate what constitutes a valid json.您可以查看此页面以验证构成有效 json 的内容。 https://jsonformatter.curiousconcept.com/ https://jsonformatter.curiousconcept.com/

Just had the same Problem and found a decent way to solve it:刚刚遇到了同样的问题,并找到了一个体面的方法来解决它:

KeyValuePair value = new KeyValuePair("additionalAdress", user.getAdditionalEmail());

return new ResponseEntity<>(value, HttpStatus.OK);

And on frontend (in my case it's Angular 2 / Typescript) you can get the value the following way:在前端(在我的情况下是 Angular 2 / Typescript),您可以通过以下方式获取值:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM