Java Spring以json的形式获取对对象转换的响应
当我转到某个URL时(在浏览器中点击URL) 我得到了一个与我的类字段匹配的json响应(GET response) 我想将这个json转换成我的对象,而不使用像jackson这样的Java转换器 我可以在这里使用什么spring注释 我尝试做的是这样的,所以它会自动将json转换为object:Java Spring以json的形式获取对对象转换的响应,java,spring,Java,Spring,当我转到某个URL时(在浏览器中点击URL) 我得到了一个与我的类字段匹配的json响应(GET response) 我想将这个json转换成我的对象,而不使用像jackson这样的Java转换器 我可以在这里使用什么spring注释 我尝试做的是这样的,所以它会自动将json转换为object: @RequestMapping("/getCar") public Car getCar(@SOMEANNOTATION(Car car) { return car;} 您可以尝试使用@Cons
@RequestMapping("/getCar")
public Car getCar(@SOMEANNOTATION(Car car)
{ return car;}
您可以尝试使用@Consumes({“application/json”,“application/xml”})您可以使用RestTemplate:
RestTemplate restTemplate = new RestTemplate();
Car car = restTemplate.getForObject("http://localhost:8080/getCar", Car.class);
您需要一辆一流的汽车,因此Spring可以绘制它的地图:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Car {
...
}
但是您需要了解,Spring仍然会在引擎盖下使用一些转换器来创建/读取数据…Sring引导文档中还有另一个解决方案 基本上,对象的序列化/反序列化由SpringConverter自动处理。换句话说,在这种情况下,您无事可做 考虑一个基本的REST控制器:
package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
解释
问候语
对象必须转换为JSON。多亏了Spring的HTTP
消息转换器支持,您不需要进行此转换
手动。因为在类路径上,所以Spring的
将自动选择转换
将问候语
实例转换为JSON
您必须使用类似的方法将请求体json自动转换为Java对象
@RequestMapping("/getCar", method =RequestMethod.POST,
produces=MediaType.APPLICATION_JSON_VALUE,consumes=MediaType.APPLICATION_JSON_VALUE)
public Car getCar(@RequestBody Car car){
return car;
}
但是,Spring将在后端使用HttpMessageConverter将json请求转换为POJO。类似的内容应该添加到@配置
类中
public void configureMessageConverters() {
List<HttpMessageConverter<?> messageConverters = new ArrayList<>();
messageConverters.add(new MappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}
public void configureMessageConverters(){
列表如何“去”到url?Spring需要一个MessageConverter,以便将您的响应转换为Json和viceversa。如果没有它,我认为您无法直接转换对象。还有org.Json
允许您将Json转换为对象。您可以检查它。@johnyaw我在browser@v1shnu这就是我所要求的——某种快速的转变方式ertingjson
->object
不像Fatima Khan
answerJackson只使用两行代码将您的json转换为object。一行是初始化对象映射器,另一行是解析该行代码。我认为这是可能的最佳选项。我不确定他是否在客户端谈论服务或处理数据r点击URL我的意思是在browser@FatimaKhan当处理get
response时,这允许直接从json
转换到所需的类对象吗?@yami是的,我想是这样==>@get@Path(“/users/{id}”)@products({“application/xml”、“application/json”}@PreAuthorize(“@urprojectname.isapiaccessable(\”“+LIST.GET\u YOURUSER+“\”))公共类对象方法(@PathParam(“id”)Long id){return class.method(id);}@FatimaKhan你的例子是错误的-我不想从url
中得到像id
这样的东西,但是从响应中获取json并将其转换为特定的类对象。我想你误解了这个问题。不客气,我没有测试它,所以请小心使用,也许在新版本的Spring中有新的东西……嘿,它没有达到我的目标,原因是困难在于应该在GET
上工作。这个代码也在GET
上工作吗?我知道如果我使用POST
我可以做到你写的。在GET方法中,你不能有一个接受参数的控制器方法。在你的问题中,你有这样的public Car getCar(@SOMEANNOTATION(汽车)
这里的Car参数对Get不起作用,因为Get没有请求正文。只有POST和PUT可以接收请求正文。是的,所以我想知道我还可以为Get
做些什么。感谢在Get中提供有价值的评论。你只能传递RequestParam。你的getCar方法到底打算做什么?我只是有一个问题,我是否可以做s正如你在这里为POST
方法写的一样-我正在寻找答案。当我读到自己的时候-我知道RequestParam
或respondeBody
在这里不好-所以我在这里发布了问题-除了我知道的jackson
之外,我还在寻找其他选择。为什么我们需要这里@RequestParam
>?我的URL
不包含任何参数。我希望从JSON
转换为对象
,而不是以其他方式。这是文档中的一个示例。请根据需要随意调整此示例。