如果它是一个 Rest 控制器,如何确保 Spring boot 自动编组一个类的对象

Posted

技术标签:

【中文标题】如果它是一个 Rest 控制器,如何确保 Spring boot 自动编组一个类的对象【英文标题】:How to make sure that an object of a class is marshalled automatically by Spring boot if it is a Rest controller 【发布时间】:2015-04-24 04:20:42 【问题描述】:

我有一个如下的 Spring Boot 应用程序,它在响应正文中使用空 JSON“”响应查询。

根据我的理解,@RestController 应该自动处理将对象编组为 JSON

我哪里错了?

我的要求:http://localhost:8080/name/sdhf

回复是:-

状态: 200 OK 显示说明加载时间:353

请求标头

用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/40.0.2214.115 Safari/537.36 来源:chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo 内容类型:应用程序/json 接受:/ DNT: 1 接受编码:gzip,放气 接受语言:en-US,en;q=0.8

响应标头

服务器:Apache-Coyote/1.1 内容类型:application/json;charset=UTF-8 传输编码:分块 日期:2015 年 2 月 22 日星期日 21:44:15 GMT

响应正文:

HelloWebAplication.scala

package helloKW
import org.springframework.http.converter.json
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.SpringApplication
import org.springframework.web.bind.annotation.RequestMapping, RestController
/**
 * This object bootstraps Spring Boot web application.
 * Via Gradle: gradle bootRun
 *
 */
 @EnableAutoConfiguration
object HelloWebApplication 

    def main(args: Array[String]) 
       SpringApplication.run(classOf[AxyzConfig]);
    

AxyzConfig.scala

package helloKW


import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.context.annotation.ComponentScan, Configuration
import org.springframework.http.HttpStatus, ResponseEntity
import org.springframework.web.bind.annotation._
import org.springframework._

/**
 * This config class will trigger Spring @annotation scanning and auto configure Spring context.
 *
 *     
 */
@RestController
@Configuration
@EnableAutoConfiguration
@ComponentScan
class AxyzConfig 
  var m : Moderator = new Moderator(10,"shgd","fsd","ifge")
  var x =10

  @RequestMapping(method = Array RequestMethod.POST,value=Array"/name/name")
  @ResponseBody
  def returnParamName(@PathVariable name:String) = new Moderator(45,"sjfg","ksgfs","kurreuk")


Moderator.scala

package helloKW


class Moderator ()
  var id = 10
  var name ="jdgsjdhg"
  var email ="sdkgsd"
  var password ="sdkfjhsdfk"

  def this(a:Int,b:String,c:String,d:String)
    this()
    this.id =  a
    this.email = b
    this.name = c
    this.password = d
  



【问题讨论】:

【参考方案1】:

如果您使用 Jackson 作为默认序列化程序,则预计 Moderator 是带有 getter 和 setter 的 java bean。因为没有 getter 和 setter,所以对象是空的。

您有两个主要选择。

选项 1 带有BeanProperty 注释的类。我更喜欢这里的案例课程,但您使用的普通课程应该还是可以的。所以每个字段都会是这样的:

@BeanProperty
var name ="jdgsjdhg"

选项 2 使用案例类并使用对象映射器注册 Jackson Scala 模块。见here。这对我来说似乎是更好的选择,但需要预先进行一些额外的设置。

【讨论】:

以上是关于如果它是一个 Rest 控制器,如何确保 Spring boot 自动编组一个类的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何确保只有特定域可以从您的 REST api 查询?

如何区分 SOAP 与 REST 请求?

如何在 REST 中管理状态

REST API:PUT但不需要json中的所有数据

如何确保只有我的 javascript 客户端 Web 应用程序向 REST API 发出请求?

SpringSecurity系列4基于Spring Webflux集成SpringSecurity实现前后端分离无状态Rest API的权限控制原理分析