Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring以json的形式获取对对象转换的响应_Java_Spring - Fatal编程技术网

Java Spring以json的形式获取对对象转换的响应

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

当我转到某个URL时(在浏览器中点击URL) 我得到了一个与我的类字段匹配的json响应(GET response)

我想将这个json转换成我的对象,而不使用像jackson这样的Java转换器

我可以在这里使用什么spring注释

我尝试做的是这样的,所以它会自动将json转换为object:

@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这就是我所要求的——某种快速的转变方式erting
json
->
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
转换为
对象
,而不是以其他方式。这是文档中的一个示例。请根据需要随意调整此示例。