春天休息没有返回我的对象​​json

时间:2014-07-31 13:25:25

标签: json spring

这是我的控制器:

@Controller
@RequestMapping("api")
public class RestController {
    @RequestMapping(value="check",method=RequestMethod.GET,produces="application/json")
    @ResponseBody
    public UserAcc returnuser(){
        return UserDao.getUserById(1);
    }
}

...这是我的UserAcc类:

@XmlRootElement
@Entity
@Table(name = "user_acc")
@NamedQueries({
@NamedQuery(name = "UserAcc.findAll", query = "SELECT u FROM UserAcc u")})
public class UserAcc implements Serializable {
private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "user_id")
    private Integer userId;

    @Basic(optional = false)
    @Lob
    @Column(name = "user_name")
    private String userName;

    @Basic(optional = false)
    @Lob
    @Column(name = "Company")
    private String company;

    @Basic(optional = false)
    @Column(name = "user_email")
    private String userEmail;

    @Basic(optional = false)
    @Column(name = "is_account_activated")
    private boolean isAccountActivated;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "assigenedToId")
    private List<Issues> issuesList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "assosiateId")
    private List<Projectdetails> projectdetailsList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "moduleassignedtoid")
    private List<DevelAcc> develAccList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "assignedUserId")
    private List<TestAcc> testAccList;

    // ... code ommitted

}

但我没有从userAcc对象获得任何json响应。有什么问题吗?我的弹簧配置工作正常。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

假设您在类路径中拥有所有必需的依赖项(如Jack的答案中已经提到的那样),您可以这样尝试:

@Controller
@RequestMapping("/api")
public class RestController {
   @RequestMapping(value="/check",method=RequestMethod.GET,produces="application/json")
   public @ResponseBody UserAcc returnuser(){
     return UserDao.getUserById(1);;
   }
}

...或者那样:

@Controller
@RequestMapping("/api")
public class RestController {
   @RequestMapping(value="/check",method=RequestMethod.GET,produces="application/json")
   public @ResponseBody Map<String, Object> returnuser(){
     UserAcc acc = UserDao.getUserById(1);
     Map<String,Object> map = new HashMap<>();
     map.put("id",""+acc.getId());
     //... and so on
     return map;
   }
}

答案 1 :(得分:1)

您需要使用库(例如jackson)将UserAcc类转换为json。 有关示例,请参阅http://www.journaldev.com/2552/spring-restful-web-service-example-with-json-jackson-and-client-program

@XmlRootElement
public class UserAcc {
    .... fields
}

答案 2 :(得分:1)

我最近使用Jackson(用于将您的POJO响应转换为JSON)实现了这一点。首先,我将Jackson依赖项添加到我的项目中(我使用Maven):

    <!-- Jackson for Java - JSON conversion -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson-2-version}</version>
    </dependency>

    <!-- Jackson for Java - JSON conversion -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson-2-version}</version>
    </dependency>

    <!-- Jackson for Java - JSON conversion -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson-2-version}</version>
    </dependency>

Spring将自动使用Jackson为任何返回&#34; application / json&#34;的Controller方法生成JSON响应。回应(就像你的情况一样)。

如果您想在JSON响应前加上一些字符来阻止JSON hijacking,那么请将它包含在Spring配置文件中:

<mvc:annotation-driven>
    <!-- Set JSON converter (for converting Java to JSON in REST response --> 
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <!-- Add prefix to JSON response to prevent JSON hijacking -->
            <property name="prefixJson" value="true" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
  • 这将使用此字符串添加所有JSON响应: {}&amp;&amp; (在处理响应之前,应由调用客户端剥离)。