You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring RestController报错:找不到java.lang.Integer返回值的转换器

嘿,我来帮你搞定这个Spring REST服务返回JAXB XML的需求,一步步来,很简单的:

步骤1:创建带JAXB注解的实体类

首先得有一个能被JAXB序列化的实体类,毕竟你要返回XML格式的简历数据嘛。给实体加上JAXB的核心注解,让框架知道怎么把对象转成XML:

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import java.util.List;

@XmlRootElement(name = "resume") // 指定XML的根节点名称
public class Resume {
    private Integer id;
    private String name;
    private List<String> skills;

    // JAXB必须要有无参构造函数,别漏了
    public Resume() {}

    public Resume(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    @XmlElement // 标记这个字段要被序列化到XML里
    public Integer getId() {
        return id;
    }

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

    @XmlElement
    public String getName() {
        return name;
    }

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

    @XmlElement(name = "skill") // 给列表元素指定XML标签名
    public List<String> getSkills() {
        return skills;
    }

    public void setSkills(List<String> skills) {
        this.skills = skills;
    }
}
步骤2:修改RestController返回实体

把你原来返回Integer的方法改成返回上面的Resume实体,同时明确指定返回类型是application/xml,这样客户端能清楚知道收到的是XML:

import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;

@RestController
public class CVIController {
    // 这里的produces参数明确告诉Spring要返回XML
    @RequestMapping(value = "/resume", produces = "application/xml")
    public Resume getResume() {
        Resume resume = new Resume(5, "John Doe");
        List<String> skills = new ArrayList<>();
        skills.add("Java");
        skills.add("Spring REST");
        skills.add("JAXB");
        resume.setSkills(skills);
        return resume;
    }
}

另外提一句:@RestController已经自带了@ResponseBody的功能,所以原来的@ResponseBody可以直接删掉,代码更简洁。

步骤3:确保Spring支持JAXB

Spring默认就支持JAXB序列化,不过要注意JDK版本:

  • Java 8及以前:JDK自带JAXB,不用额外加依赖
  • Java 9+:JAXB被移除出JDK了,需要在Maven/Gradle里加依赖,比如Maven的话:
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
    <scope>runtime</scope>
</dependency>

至于你的spring-servlet.xml,只要加上组件扫描就行,让Spring能找到你的Controller:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 替换成你Controller所在的包路径 -->
    <context:component-scan base-package="com.your.package"/>

</beans>
测试效果

启动Spring服务后,访问http://localhost:8080/resume,就能看到类似这样的XML结果了:

<resume>
    <id>5</id>
    <name>John Doe</name>
    <skill>Java</skill>
    <skill>Spring REST</skill>
    <skill>JAXB</skill>
</resume>

内容的提问来源于stack exchange,提问作者Neok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:23:14