gpt4 book ai didi

spring-mvc - Spring-boot 从 Controller 返回 json 和 xml

转载 作者:行者123 更新时间:2023-12-03 13:42:52 24 4
gpt4 key购买 nike

我有一个 spring-boot 1.1.7 应用程序,它在大部分 UI 中使用 Thymeleaf,所以我的 Controller 的响应并没有真正成为问题。但是,现在我需要在用户通过 URL 提交请求时提供 XML 响应。

这是一个典型的请求:

http://localhost:9001/remote/search?sdnName=Victoria&address=123 Maple Ave

这是我的大部分 gradle 配置:
project.ext {
springBootVersion = '1.1.7.RELEASE'
}

dependencies {
compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
compile("org.springframework.security:spring-security-web:4.0.0.M1")
compile("org.springframework.security:spring-security-config:4.0.0.M1")
compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity3:2.1.1.RELEASE')
compile("org.springframework.boot:spring-boot-starter-actuator")
compile('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.0')
}

这是我的 Controller :
@Controller
public class RemoteSearchController {

@Autowired
private SdnSearchService sdnSearchService;

@RequestMapping(value = "/remote/search", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE)
public List<Sdn> search(@ModelAttribute SdnSearch sdnSearch) {
List<Sdn> foundSdns = sdnSearchService.find( sdnSearch );
return foundSdns;
}

这是我要返回的对象:
@Entity
public class Sdn {

@Id
private long entNum;
private String sdnName;
...
//getters & setters here
}

我能够通过 REST 客户端(例如 CocoaREST)接收请求并进行处理。但是当我返回 SDN 列表时,我得到以下异常,即使我的类路径上有 Jackson 和 jackson-dataformat-xml:
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:229)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:301)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:248)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:57)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:299)

我的 REST 客户端包含一个“text/xml”的接受 header (但老实说,我希望他们不必设置它。理想情况下,无论 header 是否存在,对这个 Controller 的任何调用都将始终获得 XML)。

有没有办法处理这个?我认为媒体转换器已包含在内,只是返回了 Controller 告诉他们的任何内容?

解决方案:
请参阅下面的我发布的答案。

最佳答案

非常简单只需在 pom.xml 文件中添加 jackson-dataformat-xml 依赖项,然后您的项目就可以处理 xml/json 请求或响应。添加

   <dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>

依赖项并添加 header 内容类型或根据您的需要接受 spring boot 将处理 json/xml 中的请求或响应。全文访问: How to handle xml/json in spring boot

关于spring-mvc - Spring-boot 从 Controller 返回 json 和 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27790998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com