Spring-boot从控制器返回json和xml

我有一个Spring-boot

1.1.7应用程序,该应用程序的大部分UI使用Thymeleaf,因此控制器的响应实际上并不是问题。但是,现在当用户通过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

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”的接受标头(但老实说,我希望他们不必设置此标头。理想情况下,对该控制器的任何调用都将始终获取XML,而不管标头是否存在)。

有办法解决吗?我以为包含了媒体转换器,只是返回了控制器告诉他们的内容?

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

回答:

解决方案:我在下面结合使用了两个答案(非常感谢!)。如果有人需要帮助,我会在这里发布。

我修改后的控制器:

@Controller

public class RemoteSearchController {

@Autowired

private SdnSearchService sdnSearchService;

@RequestMapping(value = "/remote/search", method = RequestMethod.GET, produces = { "application/xml", "text/xml" }, consumes = MediaType.ALL_VALUE )

@ResponseBody

public SdnSearchResults search(@ModelAttribute SdnSearch sdnSearch) {

List<Sdn> foundSdns = sdnSearchService.find( sdnSearch );

SdnSearchResults results = new SdnSearchResults();

results.setSdns( foundSdns );

return results;

}

}

在我的客户端上,我设置了请求标头:

内容类型:应用程序/文本接受:文本/

xml我认为最终的问题是我的客户端标头设置不正确,因此我可能不必进行一些更改。但我喜欢包含结果列表的SearchResults类的想法:

@XmlRootElement

public class SdnSearchResults {

private List<Sdn> sdns;

...

}

以上是 Spring-boot从控制器返回json和xml 的全部内容, 来源链接: utcz.com/qa/429069.html

回到顶部