controller层要写什么,controller层如何接受集合
controller层要写什么,controller层如何接受集合详细介绍
本文目录一览: SpringBoot篇 - Controller中常用的注解简介
SpringBoot的Controller中经常会用到注解@Controller、@RestController、@RequestMapping、@RequestParam、@PathVariable、@RequestBody等,以下针对这些注解简单使用。
@Controller 定义了一个控制器类,它需要配合使用@RequestMapping 注解的方法才是真正处理请求的处理器。
使用此注解返回的不是Json数据,而是页面类数据。
例如:
先在pom.xml中添加依赖
然后在resources目录下新建templates目录,并且在templates目录下创建hello.html文件。
最后创建HelloController
启动服务,访问localhost:8080/test/hello,页面跳转到hello.html页面。
使用@RestController注解的方法表示一个控制器,返回json。原来返回一个json需要@Controller和@RequestBody配合使用。
例如:
启动服务,访问 http://localhost:8080/jdbc/select?memberNo=20211123146 ,返回:
@RequestMapping可以使用在类上,也可以使用在方法上。
而@GetMapping/@PostMapping 其实就是@RequestMapping和Get/Post的集合
@GetMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.GET)
@PostMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.POST )
@RequestParam用于获取查询参数。格式为:url?name=AAA
例如:
启动服务,访问 http://localhost:8080/jdbc/select?memberNo=20211123146 即可。
通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。即获取路径参数。格式为:url/{id}
例如:
启动服务,访问 http://localhost:8080/jdbc/select/20211123146 即可。
@RequestBody传递的需要是对象
示例1:
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost1 即可。查看控制台输出:
Member(memberId=5, shopId=9730231, memberNo=20211123146, mobile=13800, openId=#zssyd4U4J3p+czzXkwg+ZQ==)
示例2:
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost2 即可
示例3:不使用注解
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost3 ,并在postman的form-data中分别传入key-value
总结:
如果要在Controller层返回一个页面,用注解@Controller;如果让其作为一个接口,用@RestController
在GET请求中(@GetMapping),不能使用@RequestBody。
在POST请求(@PostMapping),可以使用@RequestBody和@RequestParam
@RequestParam注解接受的参数来源于url中,格式为xxx?username=aa&password=456,而@RequestBody注解接收的参数则是来自于requestBody中,即请求体中。
controller层如何接受集合
在controller层中,可以使用@RequestParam注解来接受集合参数。具体步骤如下:
1. 在controller方法的参数列表中,使用@RequestParam注解来声明集合参数,如下所示:
```
@RequestMapping("/users")
public String getUsers(@RequestParam List
userIds) {
// 方法体
}
```
2. 在客户端发起请求时,将集合参数以逗号分隔的形式拼接在URL上,如下所示:
```
http://localhost:8080/users?userIds=1,2,3
```
3. 在方法体中,即可使用集合参数进行业务处理。
需要注意的是,如果集合参数的元素类型为复杂类型,可以使用@RequestParam注解的value属性来指定参数名称,并使用JSON格式进行传输。具体示例如下:
```
@RequestMapping("/users")
public String getUsers(@RequestParam(value = "userIds", required = false) List
users) {
// 方法体
}
```
客户端请求示例:
```
http://localhost:8080/users?userIds=[{"id":1,"name":"John"},{"id":2,"name":"Tom"}]
```
在方法体中,即可使用users参数进行业务处理。
在controller层接受集合时,可以使用@RequestParam注解或@RequestBody注解来实现。其中@RequestParam注解用于接收表单数据或url中的参数,而@RequestBody注解则用于接收请求体中的数据。
@RequestParam注解接收的是以"&"符号分隔的key-value形式的参数,比如?id=1&name=test。而@RequestBody注解接收的是json格式的数据,也可以接收xml或其他格式的数据。在使用@RequestBody注解时,需要在请求头中指定Content-Type为application/json或其他对应的格式。
如果需要接收多个参数,可以将参数封装成一个对象,然后使用@RequestBody注解进行接收。同时,需要确保封装的对象与请求体中的数据格式一致。
需要注意的是,如果接收的集合中包含复杂对象,需要在复杂对象中添加无参构造函数,否则在反序列化时会出现异常。
在实际开发中,根据具体的需求和接口设计,可以灵活选择@RequestParam注解或@RequestBody注解来接收集合,并根据实际情况进行参数封装和数据格式的处理。
JAVA哪些代码写在service里面,哪些代码写在controller里面
把一下业务逻辑写在service层,controller层写一些控制和转发的就OK了
DDD项目怎么写controller
DDD项目写controller的方法通常会在service层上加上一层business层(或者domain层),这一层甚至可以独立成一个模块(再往外延申就接近中台的概念了,我虽然没有中台的实战经验,但是在思想上我认为是这样实现的),让架构更加灵活。但是我始终认为,这样的做法有点把service层当成基础工具类的感觉,非常难以思考如何让service层发挥更多的作用。所以,在项目中,我的service即是business,于是往常的三层架构中的service在这里被重新定义,它承担了比三层架构更多的责任,且加入更多的规范,使得service更加丰富的同时,成为了领域设计的核心所在。至于具体如何规范service层,我将在后面陈述,因为我想先把持久化层说完。service层的方法不首先考虑通用性的目的就是我希望将service丰富起来,而不是把业务逻辑“巧妙地”推给controller去完成。service中方法应该具体且使用方式明了,也就是需要符合开闭原则——方法职责明确且单一,不允许随意做出会影响调用方的更改。
controller层主要做什么
controller层是用来接受前台数据和返回页面请求信息的,Controller层是不允许直接操作数据库的。外界需要完成什么样的业务,就通过Controller去调用不同的Service,需要记住的是Controller只是一个中间者或者转发者,不应该在Controller里暴露Service的业务逻辑,而应该直接转发Service的业务处理结果。
【springboot 入门篇】第3篇 从controller开始学起
在写web项目的时候,controller里的返回值一般分为两种,一种是返回页面,也就是ModeAndView,另一种是直接返回数据,比如json格式的数据。
返回一个页面,我们需要用到一些模板引擎,比如熟知的jsp,模板引擎后面会详细讲解。
返回数据一般会选择返回json数据,我们之前的demo项目中使用的@RestController就是一个返回数据的注解。
spring-boot 支持多种模版引擎包括:
我们在讲前后端分离之前,都会使用Thymeleaf模板引擎,先简单的介绍一下它。
Thymeleaf是一个java类库,它是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。
Thymeleaf还提供了额外的木块与spring mvc集成,所以使用ssm框架的也可以使用这个模板引擎。
接下来,我们通过一个项目,来实践一下两种不同的返回结果。
先看一下最终的目录结构:
这里我们使用了Thymeleaf模板引擎来获得后台传来的数据并解析,使用bootstrap框架显示数据。可以看到,Thymeleaf的用法和jsp还是有点像的。可以直接通过${}的形式来获得attribute中的数据。
可以看到,我们成功的在前端获取到了数据。方式就是将数据保存在attribute中,然后再前端页面获取。
我们修改了注解,发现结果变了,直接显示了“index”,是因为@RestController会直接返回数据,而不是渲染页面,所以直接返回了index(这个index,是return语句中的)
访问 http://localhost:8080/person
获得了json格式的数据
访问 http://localhost:8080/persons
列表也可以直接渲染为json。
访问 http://localhost:8080/person
访问 http://localhost:8080/persons
会发现这两个都报错了,因为@Controller注解是渲染视图的,而我们返回的是对象或者集合,不能完成正常的渲染。
本文主要讲解了spring boot 如何渲染视图和数据,讲解了@Controller和@RestController的区别与用法。如果有什么疑问,请及时联系我。
我之前写过一个重新认识java系类(还没写完,会写完的。。),篇幅很长,每一篇文章多的有7、8千字,和多人抱怨说看到一半就不想看了,因为太长了,所以 spring boot 这个系类会尽量的短小精悍,每篇文章只讲一个知识点,这样看着不累~
java spring项目的controller层的代码怎么用junit写单元测试用例
Spring项目controller 是依赖springmvc的
直接启动测试,是没有初始化spring容器(web.xml中初始化)的
如果是dao层 service层的测试可以用单元测试,controller层建议还是 启动web项目吧
补充一下Java WEB开发基础知识
使用spring test加Mockito框架。需要添加第三方jar包
springboot与Junit有整合的方式,你可以模拟http请求从你的测试类发送请求到Controller,就像https://www.youyanpai.com/2018/springboot-test-with-junit4.html中描述的一样。下面我列出部分代码:
package com.youyanpai;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.MvcResult;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;@RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)public class SimpleTest { private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; /** * 前置处理 * @author 有言派 * @author www.youyanpai.com */ @Before public void before() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } /** * 测试方法 * @author 有言派 * @author www.youyanpai.com */ @Test public void testYourMethod() throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/login") .param("username", "youyanpai.com") .param("password", "youyanpai.com") .session(session)) .andReturn(); int status = mvcResult.getResponse().getStatus(); String responseString = mvcResult.getResponse().getContentAsString(); //请求是否正确 Assert.assertEquals("请求错误", 200, status); //输出返回值 System.out.println("有言派提示您,测试返回结果:"+responseString); }}希望能够帮到你!
Java网站开发问题--controller和业务逻辑层service实现类的写法
根据前台传来的参数(这个参数可以在controller里用request.getParameter("")获得),把参数放入一个map中,传给service,service再调用dao相应方法,获取数据集合,返回给controller,传到前台,就可以了
不知道数据格式是json,还是别的格式,就照上面的方面改下,调用你自己的dao方法,不就行了,不知道你用的是springmvc,还是ssh
controller是什么层
Controller一般指的是MVC架构里的控制层,是对项目里的功能做统一的调度。java里的著名的MVC框架有struts和springmvc。不过这2个都是javaweb里的框架技术。
是一个jsp、少量的用户提交内容的场景,就会来到这个代替Struts2Action的jsp,由它来调用Model层的ServiceBean,然后又redirect/forward回View层的jsp。如果顺手,可以用spring的DataBinder将Request参数绑定到DTO,否则继续复古的用N多。